RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.irobot.internal.server; 00002 00003 import java.io.IOException; 00004 00005 import rlpark.plugin.irobot.internal.descriptors.DropDescriptors; 00006 import rlpark.plugin.irobot.internal.descriptors.IRobotCreateSerialConnection; 00007 import rlpark.plugin.robot.internal.disco.drops.Drop; 00008 import rlpark.plugin.robot.internal.disco.drops.DropByteArray; 00009 import rlpark.plugin.robot.internal.disco.io.DiscoPacket; 00010 import rlpark.plugin.robot.internal.disco.io.DiscoSocket; 00011 import zephyr.plugin.core.api.signals.Signal; 00012 00013 public class ClientSocket implements Runnable { 00014 public final Signal<ClientSocket> onTerminating = new Signal<ClientSocket>(); 00015 private final Drop sensorDrop; 00016 private final DropByteArray sensorData; 00017 private final DiscoSocket socket; 00018 private final IRobotCreateSerialConnection serialConnection; 00019 private boolean wasSendingAction = false; 00020 00021 public ClientSocket(IRobotCreateSerialConnection serialConnection, DiscoSocket socket) { 00022 this.socket = socket; 00023 this.serialConnection = serialConnection; 00024 Drop robotSensorDrop = serialConnection.descriptor().createSensorDrop(); 00025 sensorDrop = DropDescriptors.newSensorSerialDrop(robotSensorDrop.name(), robotSensorDrop.dataSize()); 00026 sensorData = (DropByteArray) sensorDrop.dropDatas()[0]; 00027 } 00028 00029 @Override 00030 public void run() { 00031 while (!serialConnection.isClosed() && !socket.isSocketClosed()) { 00032 byte[] data = serialConnection.waitForRawData(); 00033 sensorData.setValue(data); 00034 try { 00035 socket.send(sensorDrop); 00036 } catch (IOException e) { 00037 e.printStackTrace(); 00038 socket.close(); 00039 } 00040 checkCommands(); 00041 } 00042 onTerminating.fire(this); 00043 } 00044 00045 private void checkCommands() { 00046 if (socket.isSocketClosed()) 00047 return; 00048 try { 00049 while (socket.dataAvailable() != 0) { 00050 DiscoPacket packet = socket.recv(); 00051 serialConnection.sendMessage(packet.buffer); 00052 wasSendingAction = true; 00053 } 00054 } catch (IOException e) { 00055 e.printStackTrace(); 00056 } 00057 } 00058 00059 public boolean wasSendingAction() { 00060 return wasSendingAction; 00061 } 00062 }