root / src / Socket.java
History | View | Annotate | Download (2.09 KB)
1 |
|
---|---|
2 |
import java.io.IOException; |
3 |
import java.net.DatagramPacket; |
4 |
import java.net.InetAddress; |
5 |
import java.net.MulticastSocket; |
6 |
import java.util.AbstractMap.SimpleEntry; |
7 |
|
8 |
public class Socket implements Runnable { |
9 |
|
10 |
public MulticastSocket socket; |
11 |
public int port; |
12 |
public InetAddress address; |
13 |
|
14 |
public enum Type { |
15 |
MC, MDB, MDR |
16 |
} |
17 |
|
18 |
public Type type; |
19 |
|
20 |
public Server peer;
|
21 |
|
22 |
// Message size(safe size)
|
23 |
public static final int MESSAGE_SIZE = 65500; |
24 |
|
25 |
// Default constructor
|
26 |
public Socket(Server peer, Type type) throws IOException { |
27 |
|
28 |
this.peer = peer;
|
29 |
|
30 |
switch (type) {
|
31 |
case MC:
|
32 |
this.port = 8000; |
33 |
this.address = InetAddress.getByName("224.0.0.1"); |
34 |
break;
|
35 |
case MDB:
|
36 |
this.port = 8001; |
37 |
this.address = InetAddress.getByName("224.0.0.2"); |
38 |
break;
|
39 |
case MDR:
|
40 |
this.port = 8002; |
41 |
this.address = InetAddress.getByName("224.0.0.3"); |
42 |
break;
|
43 |
default:
|
44 |
return;
|
45 |
} |
46 |
|
47 |
this.type = type;
|
48 |
this.socket = new MulticastSocket(this.port); |
49 |
this.socket.joinGroup(address);
|
50 |
|
51 |
} |
52 |
|
53 |
// Specific constructor
|
54 |
public Socket(Server peer, Type type, int port, String address) throws IOException { |
55 |
|
56 |
this.peer = peer;
|
57 |
this.type = type;
|
58 |
this.port = port;
|
59 |
this.address = InetAddress.getByName(address); |
60 |
this.socket = new MulticastSocket(this.port); |
61 |
this.socket.joinGroup(this.address); |
62 |
|
63 |
} |
64 |
|
65 |
@Override
|
66 |
public void run() { |
67 |
|
68 |
while (true) { |
69 |
|
70 |
byte[] buf = new byte[MESSAGE_SIZE]; |
71 |
DatagramPacket packet = new DatagramPacket(buf, buf.length); |
72 |
|
73 |
try {
|
74 |
|
75 |
this.socket.receive(packet);
|
76 |
|
77 |
System.out.println("Packet received, launching interpreter"); |
78 |
|
79 |
Server.pool.execute(new Interpreter(peer, packet));
|
80 |
|
81 |
} catch (IOException e) { |
82 |
e.printStackTrace(); |
83 |
} |
84 |
|
85 |
} |
86 |
|
87 |
} |
88 |
|
89 |
} |