internal void Main() { client = new TcpClient(); client.Connect(address, port); stream = client.GetStream(); stream.Write(Encoder.streamHelloMessage, 0, Encoder.streamHelloMessage.Length); stream.Write(clientIdentifier, 0, clientIdentifier.Length); var recvOkMessage = new byte [Encoder.okMessage.Length]; stream.Read(recvOkMessage, 0, Encoder.okMessage.Length); if (recvOkMessage.Equals(Encoder.okMessage)) { throw new Exception("Invalid hello message received from stream server. " + "Got " + Encoder.ToHexString(recvOkMessage)); } this.codedStream = new CodedInputStream(stream); try { while (true) { var message = new StreamMessage(); codedStream.ReadMessage(message); foreach (var response in message.Responses) { manager.Update(response.Id, response.Response); } } } catch (IOException) { // Exit when the connection closes } }
public void Main() { try { while (!stop) { var size = Connection.ReadMessageData(stream, ref buffer, stopEvent); if (size == 0 || stop) { break; } var update = StreamUpdate.Parser.ParseFrom(new CodedInputStream(buffer, 0, size)); if (stop) { break; } foreach (var result in update.Results) { manager.Update(result.Id, result.Result); if (stop) { break; } } } } catch (ObjectDisposedException) { // Connection closed, so exit // FIXME: is there a better way to handle this? } catch (IOException) { // Connection closed, so exit // FIXME: is there a better way to handle this? } }