コード例 #1
0
ファイル: StreamManager.cs プロジェクト: pipi1226/krpc
            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
                }
            }
コード例 #2
0
 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?
     }
 }