1
2
3
4
5
6
7 package org.mule.transport.multicast;
8
9 import org.mule.api.construct.FlowConstruct;
10 import org.mule.api.endpoint.InboundEndpoint;
11 import org.mule.api.lifecycle.CreateException;
12 import org.mule.transport.AbstractConnector;
13 import org.mule.transport.udp.UdpMessageReceiver;
14
15 import java.io.IOException;
16 import java.net.DatagramPacket;
17 import java.net.DatagramSocket;
18 import java.net.InetAddress;
19 import java.net.MulticastSocket;
20 import java.net.URI;
21
22 import javax.resource.spi.work.Work;
23
24 public class MulticastMessageReceiver extends UdpMessageReceiver
25 {
26
27 public MulticastMessageReceiver(AbstractConnector connector, FlowConstruct flowConstruct, InboundEndpoint endpoint)
28 throws CreateException
29 {
30 super(connector, flowConstruct, endpoint);
31 }
32
33 protected DatagramSocket createSocket(URI uri, InetAddress inetAddress) throws IOException
34 {
35 MulticastSocket socket = new MulticastSocket(uri.getPort());
36 socket.joinGroup(inetAddress);
37 return socket;
38 }
39
40 protected Work createWork(DatagramPacket packet) throws IOException
41 {
42 return new MulticastWorker(packet);
43 }
44
45 public class MulticastWorker extends UdpWorker
46 {
47 public MulticastWorker(DatagramPacket packet)
48 {
49 super(socket, packet);
50 }
51
52 public void dispose()
53 {
54
55
56 }
57 }
58
59 protected void doDispose()
60 {
61 if (socket != null && !socket.isClosed())
62 {
63 try
64 {
65 ((MulticastSocket) socket).leaveGroup(inetAddress);
66 }
67 catch (IOException e)
68 {
69 logger.error("failed to leave group: " + e.getMessage(), e);
70 }
71 }
72 super.doDispose();
73 }
74
75 }