public string ExecuteCommand(MinerCommand command) { string response = string.Empty; byte[] byteBuffer = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(command)); try { using (var client = new TcpClient()) { IAsyncResult ar = client.BeginConnect("localhost", PORT, null, null); WaitHandle wh = ar.AsyncWaitHandle; try { if (!ar.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), false)) { client.Close(); throw new TimeoutException(); } client.EndConnect(ar); } finally { wh.Close(); } var stream = client.GetStream(); stream.Write(byteBuffer, 0, byteBuffer.Length); var responseBytes = ReadFully(stream); if (responseBytes != null && responseBytes.Length > 0) { response = Encoding.ASCII.GetString(responseBytes, 0, responseBytes.Length); } } } catch (Exception ex) { this.knownConnected = false; if (!(ex is SocketException)) { this.Message(this, new MessageEventArgs() { Message = "Unexpected error in ExecuteCommand: " + ex.ToString() }); } return(response); } if (command.Command != "quit") { this.consecutiveLaunches = 0; // reset consecutive launches if (!this.knownConnected) { this.Connected(this, EventArgs.Empty); } this.knownConnected = true; } return(response); }
public string ExecuteCommand(MinerCommand command) { string response = string.Empty; byte[] byteBuffer = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(command)); try { using (var client = new TcpClient()) { IAsyncResult ar = client.BeginConnect("localhost", PORT, null, null); WaitHandle wh = ar.AsyncWaitHandle; try { if (!ar.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), false)) { client.Close(); throw new TimeoutException(); } client.EndConnect(ar); } finally { wh.Close(); } var stream = client.GetStream(); stream.Write(byteBuffer, 0, byteBuffer.Length); var responseBytes = ReadFully(stream); if (responseBytes != null && responseBytes.Length > 0) { response = Encoding.ASCII.GetString(responseBytes, 0, responseBytes.Length); } } } catch (Exception ex) { this.knownConnected = false; if (!(ex is SocketException)) { this.Message(this, new MessageEventArgs() { Message = "Unexpected error in ExecuteCommand: " + ex.ToString() }); } return response; } if (command.Command != "quit") { this.consecutiveLaunches = 0; // reset consecutive launches if (!this.knownConnected) { this.Connected(this, EventArgs.Empty); } this.knownConnected = true; } return response; }