Started on UDP server support for CollectView

This commit is contained in:
Niclas Finne 2011-06-01 20:24:40 +02:00
parent af601dfb23
commit 86169177c5
2 changed files with 130 additions and 2 deletions

View file

@ -1443,6 +1443,7 @@ public class CollectServer implements SerialConnectionListener {
String command = null;
String logFileToLoad = null;
String comPort = null;
int port = -1;
for(int i = 0, n = args.length; i < n; i++) {
String arg = args[i];
if (arg.length() == 2 && arg.charAt(0) == '-') {
@ -1454,6 +1455,13 @@ public class CollectServer implements SerialConnectionListener {
usage(arg);
}
break;
case 'p':
if (i + 1 < n) {
port = Integer.parseInt(args[++i]);
} else {
usage(arg);
}
break;
case 'r':
resetSensorLog = true;
break;
@ -1485,7 +1493,9 @@ public class CollectServer implements SerialConnectionListener {
CollectServer server = new CollectServer();
SerialConnection serialConnection;
if (command == null) {
if (port > 0) {
serialConnection = new UDPConnection(server, port);
} else if (command == null) {
serialConnection = new SerialDumpConnection(server);
} else if (command == STDIN_COMMAND) {
serialConnection = new StdinConnection(server);
@ -1516,11 +1526,12 @@ public class CollectServer implements SerialConnectionListener {
if (arg != null) {
System.err.println("Unknown argument '" + arg + '\'');
}
System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-c command] [COMPORT]");
System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-p port] [-c command] [COMPORT]");
System.err.println(" -n : Do not read or save sensor data log");
System.err.println(" -r : Clear any existing sensor data log at startup");
System.err.println(" -i : Do not allow serial output");
System.err.println(" -f : Read serial data from standard in");
System.err.println(" -p : Read data from specified UDP port");
System.err.println(" -c : Use specified command for serial data input/output");
System.err.println(" COMPORT: The serial port to connect to");
System.exit(arg != null ? 1 : 0);

View file

@ -0,0 +1,117 @@
/*
* Copyright (c) 2011, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* -----------------------------------------------------------------
*
* UDPConnection
*
* Authors : Niclas Finne
* Created : 1 June 2011
*/
package se.sics.contiki.collect;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
*
*/
public class UDPConnection extends SerialConnection {
private final int port;
private DatagramSocket serverSocket;
public UDPConnection(SerialConnectionListener listener, int port) {
super(listener);
this.port = port;
}
@Override
public String getConnectionName() {
return "<UDP:" + port + ">";
}
@Override
public void open(String comPort) {
close();
this.comPort = comPort == null ? "" : comPort;
isClosed = false;
try {
serverSocket = new DatagramSocket(port);
/* Start thread listening on UDP */
Thread readInput = new Thread(new Runnable() {
public void run() {
byte[] data = new byte[1024];
try {
while (isOpen) {
DatagramPacket packet = new DatagramPacket(data, data.length);
serverSocket.receive(packet);
InetAddress addr = packet.getAddress();
System.out.println("UDP: received " + packet.getLength() + " bytes from " + addr.getHostAddress() + ":" + packet.getPort());
// TODO handle data
// serialData(line);
}
System.out.println("SerialConnection UDP terminated.");
closeConnection();
} catch (IOException e) {
lastError = "Error when reading from SerialConnection UDP: " + e;
System.err.println(lastError);
if (!isClosed) {
e.printStackTrace();
closeConnection();
}
}
}
}, "UDP thread");
isOpen = true;
serialOpened();
readInput.start();
} catch (Exception e) {
lastError = "Failed to open UDP server at port " + port + ": " + e;
System.err.println(lastError);
e.printStackTrace();
closeConnection();
}
}
@Override
protected void doClose() {
if (serverSocket != null) {
serverSocket.close();
serverSocket = null;
}
}
}