Project

General

Profile

Statistics
| Revision:

root / src / Channel / Channel.java @ 2

History | View | Annotate | Download (1.7 KB)

1
package Channel;
2

    
3
import Message.*;
4
import Peers.Peer;
5

    
6
import java.io.IOException;
7
import java.io.Serializable;
8
import java.net.*;
9
import java.util.concurrent.TimeUnit;
10

    
11
public class Channel implements Runnable, Serializable {
12

    
13
    Peer peer;
14

    
15
    MulticastSocket socket;
16

    
17
    int port;
18

    
19
    InetAddress address;
20

    
21

    
22
    public Channel(String address, int port, Peer peer) throws IOException {
23

    
24
        this.port = port;
25

    
26
        try {
27

    
28
            this.address = InetAddress.getByName(address);
29

    
30
            socket = new MulticastSocket(port); // sockets
31

    
32
            socket.joinGroup(this.address);
33
            socket.setTimeToLive(1);
34
            this.peer = peer;
35

    
36
        } catch (UnknownHostException e) {
37

    
38

    
39
        }
40

    
41

    
42
    }
43

    
44

    
45
    public void send(Message message) { //ou a mensagem e constrĂ³i aqui?
46

    
47
        try {
48

    
49
            byte[] mes = message.messagePacket();
50
            DatagramPacket data = new DatagramPacket(mes, mes.length, this.address, this.port);
51
            System.out.println("Sending " + message.getType().toString() + " Packet");
52
            socket.send(data);
53
        } catch (IOException e) {
54
            e.printStackTrace();
55
        }
56

    
57
    }
58

    
59

    
60
    @Override
61
    public void run() {
62

    
63
        while (true) {
64
            try {
65
                byte[] buffer = new byte[65000];
66
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
67

    
68
                socket.receive(packet);
69

    
70
                //lançar thread que trabalha a mensagem
71

    
72
                peer.getThreadPool().execute(new WorkMessage(packet, peer));
73

    
74

    
75
//                new Thread(new WorkMessage(packet, peer)).start();
76

    
77
            } catch (IOException e) {
78
                e.printStackTrace();
79
            }
80

    
81
        }
82

    
83
    }
84

    
85
}