package ch.usi.da.paxos.lab; /* * Copyright (c) 2013 Università della Svizzera italiana (USI) * * This file is part of URingPaxos. * * URingPaxos is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * URingPaxos is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with URingPaxos. If not, see <http://www.gnu.org/licenses/>. */ import java.io.IOException; import java.net.NetworkInterface; import java.net.StandardProtocolFamily; import java.net.StandardSocketOptions; import java.nio.channels.DatagramChannel; import ch.usi.da.paxos.api.PaxosRole; import ch.usi.da.paxos.old.Configuration; /** * Name: Multicast<br> * Description: <br> * * Creation date: Mar 31, 2012<br> * $Id$ * * @author Samuel Benz benz@geoid.ch */ public class Multicast { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { if(Configuration.getConfiguration().isEmpty()){ Configuration.read(args[0]); } /** old fashion // open int port = Configuration.getGroup(MessageGroup.Acceptor).getPort(); MulticastSocket socket = new MulticastSocket(port); InetAddress addr = Configuration.getGroup(MessageGroup.Acceptor).getAddress(); socket.joinGroup(addr); socket.setSoTimeout(5000); // send Message test = new Message(0,1,MessageGroup.Acceptor,MessageType.Prepare, 01, 42); byte[] m = Message.toWire(test); DatagramPacket packet = new DatagramPacket(m,m.length,Configuration.getGroup(MessageGroup.Acceptor)); socket.send(packet); // receive byte[] buffer = new byte[8192]; DatagramPacket p = new DatagramPacket(buffer,0,buffer.length); socket.receive(p); System.out.println(Message.fromWire(p.getData()).getValue()); // close socket.close(); */ NetworkInterface i = NetworkInterface.getByName(Configuration.getInterface()); DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET) .setOption(StandardSocketOptions.SO_REUSEADDR, true) .bind(Configuration.getGroup(PaxosRole.Acceptor)) .setOption(StandardSocketOptions.IP_MULTICAST_IF, i); channel.configureBlocking(false); channel.join(Configuration.getGroup(PaxosRole.Acceptor).getAddress(), i); Thread t = new Thread(new MulticastListener("1",channel)); t.start(); Thread t2 = new Thread(new MulticastListener("2",channel)); t2.start(); } }