1
2 package org.neo.swarm.util.network.jrms;
3
4 import java.io.IOException;
5 import java.net.DatagramPacket;
6 import java.net.InetAddress;
7
8 import org.neo.swarm.util.network.multicast.Receiver;
9
10 import com.sun.multicast.reliable.RMException;
11 import com.sun.multicast.reliable.transport.InvalidMulticastAddressException;
12 import com.sun.multicast.reliable.transport.InvalidTransportProfileException;
13 import com.sun.multicast.reliable.transport.IrrecoverableDataException;
14 import com.sun.multicast.reliable.transport.RMPacketSocket;
15 import com.sun.multicast.reliable.transport.SessionDoneException;
16 import com.sun.multicast.reliable.transport.TransportProfile;
17 import com.sun.multicast.reliable.transport.lrmp.LRMPTransportProfile;
18 import com.sun.multicast.util.UnsupportedException;
19
20 /***
21 * @author navery
22 */
23 public class JRMSReceiver implements Receiver {
24
25 protected RMPacketSocket socket;
26
27 public JRMSReceiver(InetAddress inetAddress, int port) {
28 this(inetAddress, port, TransportProfile.RECEIVER);
29 }
30 public JRMSReceiver(InetAddress inetAddress, int port, int transportProfile) {
31 try {
32 LRMPTransportProfile profile = new LRMPTransportProfile(inetAddress, port);
33 profile.setTTL((byte) 1);
34 profile.setOrdered(true);
35 this.socket = profile.createRMPacketSocket(transportProfile);
36 } catch (InvalidMulticastAddressException ex) {
37 ex.printStackTrace();
38 } catch (InvalidTransportProfileException ex){
39 ex.printStackTrace();
40 } catch (IOException ex){
41 ex.printStackTrace();
42 } catch (UnsupportedException ex){
43 ex.printStackTrace();
44 }
45 }
46
47 public byte[] read() {
48 try {
49 DatagramPacket packet = socket.receive();
50 return packet.getData();
51 } catch (IrrecoverableDataException ex) {
52 ex.printStackTrace();
53 } catch (SessionDoneException ex) {
54 ex.printStackTrace();
55 } catch (IOException ex) {
56 ex.printStackTrace();
57 } catch (RMException ex) {
58 ex.printStackTrace();
59 }
60 return null;
61 }
62
63 public void close() {
64 socket.close();
65 }
66 }