private void DoHandshake(string userName, byte[] cookie) { var hello = GetHelloMessage(userName, cookie); Send(hello); BinaryMessage reply; ConnectionError error; while (true) { if (!socket.Receive(out reply)) { throw new NetworkException(ConnectionError.ConnectionError); } if (reply.Type == MSG_SESS) { error = (ConnectionError)reply.GetReader().ReadByte(); break; } if (reply.Type == MSG_CLOSE) { error = ConnectionError.ConnectionError; break; } } if (error != ConnectionError.None) { throw new NetworkException(error); } }
protected override void OnStart() { BinaryMessage message; try { while (!IsCancelled) { if (socket.Receive(out message)) { messageHandler(message); } } } catch (ObjectDisposedException) { // to prevent this exception: // a. code that stops tasks needs to be written more carefully // b. socket poll method needs to support cancellation } }