01: /*
02: * $Id: MulticastMessageReceiver.java 10961 2008-02-22 19:01:02Z dfeist $
03: * --------------------------------------------------------------------------------------
04: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
05: *
06: * The software in this package is published under the terms of the CPAL v1.0
07: * license, a copy of which has been included with this distribution in the
08: * LICENSE.txt file.
09: */
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: public MulticastMessageReceiver(AbstractConnector connector,
31: Service service, InboundEndpoint endpoint)
32: throws CreateException {
33: super (connector, service, endpoint);
34: }
35:
36: protected DatagramSocket createSocket(URI uri,
37: InetAddress inetAddress) throws IOException {
38: MulticastSocket socket = new MulticastSocket(uri.getPort());
39: socket.joinGroup(inetAddress);
40: return socket;
41: }
42:
43: protected Work createWork(DatagramPacket packet) throws IOException {
44: return new MulticastWorker(packet);
45: }
46:
47: public class MulticastWorker extends UdpWorker {
48: public MulticastWorker(DatagramPacket packet) {
49: super (socket, packet);
50: }
51:
52: public void dispose() {
53: // Do not close socket as we reuse it
54: // So do not call super.doDispose();
55: }
56: }
57:
58: protected void doDispose() {
59: if (socket != null && !socket.isClosed()) {
60: try {
61: ((MulticastSocket) socket).leaveGroup(inetAddress);
62: } catch (IOException e) {
63: logger.error(
64: "failed to leave group: " + e.getMessage(), e);
65: }
66: }
67: super.doDispose();
68: }
69:
70: }
|