123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- /*
- *
- * Copyright (C) Andrew Smith 2013
- *
- * Usage: java MCast [-v] code toaddr port replyport wait
- *
- * If any are missing or blank they use the defaults:
- *
- * -v means report how long the last reply took
- *
- * code = 'FTW'
- * toaddr = '224.0.0.75'
- * port = '4028'
- * replyport = '4027'
- * wait = '1000'
- *
- */
- import java.net.*;
- import java.io.*;
- import java.util.*;
- class MCast implements Runnable
- {
- static private final String MCAST_CODE = "FTW";
- static private final String MCAST_ADDR = "224.0.0.75";
- static private final int MCAST_PORT = 4028;
- static private final int MCAST_REPORT = 4027;
- static private final int MCAST_WAIT4 = 1000;
- static private String code = MCAST_CODE;
- static private String addr = MCAST_ADDR;
- static private int port = MCAST_PORT;
- static private int report = MCAST_REPORT;
- static private int wait4 = MCAST_WAIT4;
- private InetAddress mcast_addr = null;
- static private final Integer lock = new Integer(666);
- static private boolean ready = false;
- static private Thread listen = null;
- static public boolean verbose = false;
- static private Date start = null;
- static private Date last = null;
- static boolean got_last = false;
- static public void usAge()
- {
- System.err.println("usAge: java MCast [-v] [code [toaddr [port [replyport [wait]]]]]");
- System.err.println(" -v=report elapsed ms to last reply");
- System.err.println(" Anything below missing or blank will use it's default");
- System.err.println(" code=X in cgminer-X-Port default="+MCAST_CODE);
- System.err.println(" toaddr=multicast address default="+MCAST_ADDR);
- System.err.println(" port=multicast port default="+MCAST_PORT);
- System.err.println(" replyport=local post to listen for replies default="+MCAST_REPORT);
- System.err.println(" wait=how long to wait for replies default="+MCAST_WAIT4+"ms");
- System.exit(1);
- }
- private int port(String _port, String name)
- {
- int tmp = 0;
- try
- {
- tmp = Integer.parseInt(_port);
- }
- catch (NumberFormatException nfe)
- {
- System.err.println("Invalid " + name + " - must be a number between 1 and 65535");
- usAge();
- System.exit(1);
- }
- if (tmp < 1 || tmp > 65535)
- {
- System.err.println("Invalid " + name + " - must be a number between 1 and 65535");
- usAge();
- System.exit(1);
- }
- return tmp;
- }
- public void set_code(String _code)
- {
- if (_code.length() > 0)
- code = _code;
- }
- public void set_addr(String _addr)
- {
- if (_addr.length() > 0)
- {
- addr = _addr;
- try
- {
- mcast_addr = InetAddress.getByName(addr);
- }
- catch (Exception e)
- {
- System.err.println("ERR: Invalid multicast address");
- usAge();
- System.exit(1);
- }
- }
- }
- public void set_port(String _port)
- {
- if (_port.length() > 0)
- port = port(_port, "port");
- }
- public void set_report(String _report)
- {
- if (_report.length() > 0)
- report = port(_report, "reply port");
- }
- public void set_wait(String _wait4)
- {
- if (_wait4.length() > 0)
- {
- try
- {
- wait4 = Integer.parseInt(_wait4);
- }
- catch (NumberFormatException nfe)
- {
- System.err.println("Invalid wait - must be a number between 0ms and 60000ms");
- usAge();
- System.exit(1);
- }
- if (wait4 < 0 || wait4 > 60000)
- {
- System.err.println("Invalid wait - must be a number between 0ms and 60000ms");
- usAge();
- System.exit(1);
- }
- }
- }
- public void run() // listen
- {
- byte[] message = new byte[1024];
- DatagramSocket socket = null;
- DatagramPacket packet = null;
- try
- {
- socket = new DatagramSocket(report);
- packet = new DatagramPacket(message, message.length);
- synchronized (lock)
- {
- ready = true;
- }
- while (true)
- {
- socket.receive(packet);
- synchronized (lock)
- {
- last = new Date();
- }
- int off = packet.getOffset();
- int len = packet.getLength();
- System.out.println("Got: '" + new String(message, off, len) + "' from" + packet.getSocketAddress());
- }
- }
- catch (Exception e)
- {
- socket.close();
- }
- }
- public void sendMCast()
- {
- try
- {
- String message = new String("cgminer-" + code + "-" + report);
- MulticastSocket socket = null;
- DatagramPacket packet = null;
- socket = new MulticastSocket();
- packet = new DatagramPacket(message.getBytes(), message.length(), mcast_addr, port);
- System.out.println("About to send " + message + " to " + mcast_addr + ":" + port);
- start = new Date();
- socket.send(packet);
- socket.close();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- public void init()
- {
- MCast lis = new MCast();
- listen = new Thread(lis);
- listen.start();
- while (true)
- {
- synchronized (lock)
- {
- if (ready)
- break;
- }
- try
- {
- Thread.sleep(100);
- }
- catch (Exception sl1)
- {
- }
- }
- try
- {
- Thread.sleep(500);
- }
- catch (Exception sl2)
- {
- }
- sendMCast();
- try
- {
- Thread.sleep(wait4);
- }
- catch (Exception sl3)
- {
- }
- listen.interrupt();
- if (verbose)
- {
- try
- {
- Thread.sleep(100);
- }
- catch (Exception sl4)
- {
- }
- synchronized (lock)
- {
- if (last == null)
- System.out.println("No replies received");
- else
- {
- long diff = last.getTime() - start.getTime();
- System.out.println("Last reply took " + diff + "ms");
- }
- }
- }
- System.exit(0);
- }
- public MCast()
- {
- }
- public static void main(String[] params) throws Exception
- {
- int p = 0;
- MCast mcast = new MCast();
- mcast.set_addr(MCAST_ADDR);
- if (params.length > p)
- {
- if (params[p].equals("-?")
- || params[p].equalsIgnoreCase("-h")
- || params[p].equalsIgnoreCase("-help")
- || params[p].equalsIgnoreCase("--help"))
- MCast.usAge();
- else
- {
- if (params[p].equals("-v"))
- {
- mcast.verbose = true;
- p++;
- }
- if (params.length > p)
- {
- mcast.set_code(params[p++]);
- if (params.length > p)
- {
- mcast.set_addr(params[p++]);
- if (params.length > p)
- {
- mcast.set_port(params[p++]);
- if (params.length > p)
- {
- mcast.set_report(params[p++]);
- if (params.length > p)
- mcast.set_wait(params[p]);
- }
- }
- }
- }
- }
- }
- mcast.init();
- }
- }
|