示例#1
0
        public void Close()
        {
            lock (stateLock)
            {
                if (state != State.Started)
                {
                    return;
                }

                state = State.Closing;

                DemonitorTask(receiver);
                receiver.Stop();

                DemonitorTask(receiver);
                sender.Stop();

                socket.Send(BinaryMessage.Make(MSG_CLOSE).Complete());
                // HACK: otherwise close message may not be sent
                Thread.Sleep(TimeSpan.FromMilliseconds(5));
                socket.Close();

                state = State.Closed;
            }
            Dispatcher.Dispatch(new ExitMessage());
        }