1 package com.neuronrobotics.sdk.common.device.server;
3 import java.io.IOException;
4 import java.net.InetAddress;
5 import java.net.ServerSocket;
6 import java.net.Socket;
7 import java.net.UnknownHostException;
8 import java.util.ArrayList;
10 import javax.management.RuntimeErrorException;
12 import com.neuronrobotics.sdk.common.BowlerAbstractCommand;
13 import com.neuronrobotics.sdk.common.BowlerAbstractConnection;
14 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
15 import com.neuronrobotics.sdk.common.BowlerDataType;
16 import com.neuronrobotics.sdk.common.BowlerDatagram;
17 import com.neuronrobotics.sdk.common.BowlerDatagramFactory;
18 import com.neuronrobotics.sdk.common.BowlerMethod;
19 import com.neuronrobotics.sdk.common.DeviceConnectionException;
20 import com.neuronrobotics.sdk.common.DeviceManager;
21 import com.neuronrobotics.sdk.common.IConnectionEventListener;
22 import com.neuronrobotics.sdk.common.ISynchronousDatagramListener;
23 import com.neuronrobotics.sdk.common.Log;
24 import com.neuronrobotics.sdk.common.MACAddress;
25 import com.neuronrobotics.sdk.common.NamespaceEncapsulation;
26 import com.neuronrobotics.sdk.common.RpcEncapsulation;
27 import com.neuronrobotics.sdk.common.device.server.bcs.core.BcsCoreNamespaceImp;
28 import com.neuronrobotics.sdk.common.device.server.bcs.rpc.BcsRpcNamespaceImp;
29 import com.neuronrobotics.sdk.network.BowlerTCPServer;
30 import com.neuronrobotics.sdk.network.BowlerUDPServer;
31 import com.neuronrobotics.sdk.network.UDPBowlerConnection;
41 private ArrayList<BowlerAbstractConnection>
servers =
new ArrayList<BowlerAbstractConnection>();
44 private ArrayList<BowlerAbstractConnection>
localServers =
new ArrayList<BowlerAbstractConnection>();
47 private ArrayList<BowlerAbstractDeviceServerNamespace>
namespaces =
new ArrayList<BowlerAbstractDeviceServerNamespace>();
129 throw new RuntimeException(
"No namespaces defined");
133 if (n.checkRpc(data)) {
136 if (!d.
getRPC().contains(
"_err"))
141 Log.
error(
"No namespace found for " + data);
155 ServerSocket serverSocket;
165 serverSocket =
new ServerSocket(port + 1);
168 setName(
"Bowler Platform Network Server");
174 Log.
warning(
"\n\nWaiting for UDP connection on port "+(port)+
"...");
175 Log.
warning(
"\n\nWaiting for TCP connection on port "+(port+1)+
"...");
176 s = serverSocket.accept();
179 }
catch (IOException e) {
231 Log.
error(
"Upstream packet detected" + data);
234 if (!data.
getRPC().contains(
"_png"))
241 if (!data.
getRPC().contains(
"_png"))
242 Log.
debug(
"Server Response << " + bd);
262 }
catch (IOException e) {
290 String rpcString, Object[] arguments,
292 if (arguments.length != asyncArguments.length) {
293 throw new RuntimeException(
294 "Arguments must match argument types exactly, your two arrays are different lengths");
315 for (
int i = 0; i <
servers.size(); i++) {
319 for (
int i = 0; i <
servers.size(); i++) {
326 Log.
info(
"TCP Bowler client ...OK!");
338 Log.
info(
"Sent packet to " + classString);
343 }
catch (NullPointerException ex) {
346 }
catch (IndexOutOfBoundsException ie) {
347 ie.printStackTrace();
348 }
catch (Exception e) {
352 Log.
error(
"No client connected to this connection "
356 }
catch (Exception ex) {
357 ex.printStackTrace();
379 ArrayList<BowlerAbstractDeviceServerNamespace>
namespaces) {
static BowlerAbstractCommand getCommand(String namespace, BowlerMethod method, String rpcString, Object[] arguments, RpcEncapsulation rpc)
void addConnectionEventListener(IConnectionEventListener l)
void setSynchronousDatagramListener(ISynchronousDatagramListener l)
abstract boolean connect()
static void info(String message)
static void error(String message)
static void warning(String message)
static void debug(String message)
void setNamespaceIndex(int ns)
synchronized void pushAsyncPacket(BowlerDatagram data)
BcsRpcNamespaceImp bcsRpc
BowlerAbstractServer(MACAddress mac)
BowlerDatagram onSyncReceive(BowlerDatagram data)
void startNetworkServer(final int port)
ArrayList< BowlerAbstractConnection > localServers
BowlerUDPServer udpServer
void setMacAddress(MACAddress macAddress)
ArrayList< BowlerAbstractDeviceServerNamespace > namespaces
BcsCoreNamespaceImp bcsCore
void removeBowlerDeviceServerNamespace(BowlerAbstractDeviceServerNamespace ns)
BowlerDatagram processLocal(BowlerDatagram data)
ArrayList< BowlerAbstractDeviceServerNamespace > getNamespaces()
void addBowlerDeviceServerNamespace(BowlerAbstractDeviceServerNamespace ns)
ArrayList< BowlerAbstractConnection > getServers()
void pushAsyncPacket(int namespaceIndex, String namespace, String rpcString, Object[] arguments, BowlerDataType[] asyncArguments)
void setNamespaces(ArrayList< BowlerAbstractDeviceServerNamespace > namespaces)
void removeServer(BowlerAbstractConnection b)
MACAddress getMacAddress()
void startNetworkServer()
void addServer(BowlerAbstractConnection srv)
ArrayList< BowlerAbstractConnection > servers
boolean isClientConnected()