blob: e8bd153b0b4adaac75042758cbcfdb939b5b8a3d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
package Server;
import java.net.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
class ParsedLine
{
private String line;
private String command;
private String args;
/**splits the line by white spaces, to fetch the command and arguments
* @param line */
public ParsedLine(String line)
{
this.line = line;
String[] parsedLine = this.line.split("[ \t]+", 2);
if (parsedLine.length > 1)
this.args = parsedLine[1];
else
this.args = "";
if (parsedLine.length > 0)
this.command = parsedLine[0];
else
this.command = "";
}
/** returning the command. */
public String getCommand()
{
return this.command;
}
/** returning arguments */
public String getArgs()
{
return this.args;
}
}
public class Connection extends Thread
{
private Socket soc;
private Client client;
/** constructor */
public Connection(Socket soc)
{
this.soc = soc;
}
/** returning the client. */
public Client getClient()
{
return this.client;
}
/** removing the connection from the list and the nick from the dictionary */
public void shutdown()
{
ChatServer.server.connectionRemove(this);
ChatServer.server.removeNick(client.getNick());
try
{
if (!soc.isClosed())
soc.close();
} catch (IOException e) {}
}
/** pretty print (the port) */
public String toString()
{
return "[" + soc.getPort() + "]";
}
/** main loop of connection */
@SuppressWarnings("deprecation")
public void run()
{
try
{
CommandsTable commandsTable = new CommandsTable();
InputStreamReader InTemp = new InputStreamReader(soc.getInputStream());
BufferedReader input = new BufferedReader(InTemp);
OutputStreamWriter outTemp = new OutputStreamWriter(soc.getOutputStream());
BufferedWriter output = new BufferedWriter(outTemp);
client = new Client(soc, output, this);
while (true)
{
ParsedLine parsedLine;
String line;
try
{
line = input.readLine();
} catch (java.net.SocketException e)
{
shutdown();
break;
}
if (line == null)
{
System.err.println("Got null line");
shutdown();
break;
}
parsedLine = new ParsedLine(line);
String s = soc.getPort() + ": <" + line + ">";
System.out.println(s);
s = soc.getPort() + ": <" + line + ">, command: <" + parsedLine.getCommand() + ">, args: <" + parsedLine.getArgs() + ">.";
commandsTable.runCommand(client, parsedLine.getCommand(), parsedLine.getArgs());
}
} catch (IOException e)
{
e.printStackTrace();
shutdown();
}
}
}
|