private void CommandWorker() { //lock (sync) { while (cmdQueue.Count > 0) { NXTCommand cmd = (NXTCommand)cmdQueue[0]; if (!SocketSend(cmd.command)) { cmdArchive.Add(cmd); cmdQueue.RemoveAt(0); cmdQueue.TrimToSize(); continue; } if (cmd.UpdateStatus()) { SocketReceive(cmd.reply); } ProcessReply(cmd); cmdArchive.Add(cmd); cmdQueue.RemoveAt(0); cmdQueue.TrimToSize(); /* * byte nError = cmd.reply[2]; * if (nError > 0) * throw new NXTException(GetError(nError)); */ } } }
protected bool SendCommand(byte[] command, byte[] reply) { NXTCommand cmd = new NXTCommand(command, reply); lock (sync) { cmdQueue.Add(cmd); if (cmdThread == null || !cmdThread.IsAlive) { cmdThread = new Thread(CommandWorker); cmdThread.Start(); } } return(true); }
public void ProcessReply(NXTCommand cmd) { switch ((NXTCommandCode)cmd.commandCode) { case NXTCommandCode.GETOUTPUTSTATE: break; case NXTCommandCode.GETINPUTVALUES: break; case NXTCommandCode.GETBATTERYLEVEL: Process_GetBatteryLevel(cmd.reply); break; case NXTCommandCode.KEEPALIVE: Process_KeepAlive(cmd.reply); break; case NXTCommandCode.LSGETSTATUS: Process_LSGetStatus(cmd.reply); break; case NXTCommandCode.LSWRITE: break; case NXTCommandCode.LSREAD: Process_LSRead(cmd.reply); break; case NXTCommandCode.GETCURRENTPROGRAMNAME: break; case NXTCommandCode.MESSAGEREAD: Process_MessageRead(cmd.reply); break; case NXTCommandCode.VERSION: Process_GetVersion(cmd.reply); break; } }
protected bool SendCommand(byte[] command, byte[] reply) { NXTCommand cmd = new NXTCommand(command, reply); lock (sync) { cmdQueue.Add(cmd); if (cmdThread == null || !cmdThread.IsAlive) { cmdThread = new Thread(CommandWorker); cmdThread.Start(); } } return true; }