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