protected bool Send(byte endpoint, byte[] buffer, bool sync) { Logger.Trace("\t" + BinConvert.ToHex(endpoint) + " < " + BinConvert.ToHex(buffer)); byte[] t = new byte[1 + buffer.Length]; t[0] = endpoint; for (int i = 0; i < buffer.Length; i++) { t[1 + i] = buffer[i]; } if (!clientSocket.Connected) { return(false); } bool success = false; try { if (sync) { lock (sync_request) { CommandSyncEvent.Reset(); clientStream.Write(t, 0, t.Length); success = CommandSyncEvent.WaitOne(CommandTimeout); } } else { clientStream.Write(t, 0, t.Length); success = true; } } catch (Exception e) { Logger.Error("Error while sending to device: " + e.Message); success = false; } if (!success) { Logger.Error("Device error"); clientSocket.Close(); return(false); } return(true); }
private void ReceiverThread() { int bytesRead = 0; recv_buffer = new byte[1492]; while (clientSocket.Connected) { try { bytesRead = clientStream.Read(recv_buffer, 0, recv_buffer.Length); if (bytesRead <= 0) { continue; } if (!clientSocket.Connected) { break; } byte[] buffer = new byte[bytesRead]; Array.Copy(recv_buffer, buffer, buffer.Length); Recv(buffer); } catch (Exception e) { if (e is System.IO.IOException) { Logger.Debug("Socket has been closed"); } else { Logger.Error("Error in receiver thread: " + e.Message); } break; } } CommandSyncEvent.Set(); clientSocket = null; Logger.Debug("Received thread ended"); }