示例#1
0
        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);
            }
        }
示例#2
0
        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
            }
        }