RLPark 1.0.0
Reinforcement Learning Framework in Java

ClientSocket.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark