示例#1
0
 /// <summary>
 /// 退出
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btn_exit_Click(object sender, EventArgs e)
 {
     if (MessageBox.Show("手动停止服务器之后需要人工重启", "停止服务", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
     {
         // 关闭所有的线程
         if (server.IsRunning)
         {
             server.Stop();
         }
         this.Dispose();
         this.Close();
     }
 }
示例#2
0
 private void StopServer()
 {
     if (tcpServer != null)
     {
         tcpServer.Stop();
     }
 }
示例#3
0
 /// <summary>停止监听服务</summary>
 public bool StopListener()
 {
     try
     {
         Console.Write("停止监听服务");
         server.Stop();
         Console.WriteLine(" -> 完成");
         return(true);
     }
     catch (Exception ex)
     {
         Console.WriteLine(" -> listener.stop.error.");
         Console.WriteLine(ex.Message);
     }
     return(false);
 }
示例#4
0
        /// <summary>
        /// 停止监控
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StopMonitorClicked(object sender, RoutedEventArgs e)
        {
            //终止线程
            if (monitorThread != null)
            {
                monitorThread.Abort();
                monitorThread.Join();
                monitorThread = null;
            }

            //停止服务器
            if (tcpServer != null)
            {
                tcpServer.Stop();
            }

            lblStatus.Content = "监控已停止";
            lbClient.Items.Clear();
        }
示例#5
0
        public async Task ServerIsAbleToProcessPacketsAndCleansUpResources(ISocketSessionFactory sessionFactory, IProcessor processor, IPlayer player)
        {
            player.GetCityCount().Returns(1);
            player.HasTwoFactorAuthenticated = DateTime.Now;

            var socketAwaitablePool = new SocketAwaitablePool(10);
            var buffer = new BlockingBufferManager(1000, 15);

            Socket             serverSideSocket = null;
            AsyncSocketSession session          = null;

            sessionFactory.CreateAsyncSocketSession(Arg.Any <string>(), Arg.Any <Socket>())
            .Returns(args =>
            {
                serverSideSocket = args.Arg <Socket>();
                session          = new AsyncSocketSession(string.Empty, serverSideSocket, processor, socketAwaitablePool, buffer)
                {
                    Player = player
                };
                return(session);
            });

            AsyncTcpServer server = new AsyncTcpServer(sessionFactory, socketAwaitablePool, buffer);

            try
            {
                server.Start("127.0.0.1", 0);

                // Connect and verify client connected and socket options are set
                var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                {
                    NoDelay = true
                };

                var packetToSend1 = new Packet(Command.MarketSell);
                packetToSend1.AddString("Hello");
                var bytesToSendOnConnect = packetToSend1.GetBytes();

                await socket.ConnectAsync(new SocketAwaitable
                {
                    RemoteEndPoint = server.LocalEndPoint
                });

                await Task.Delay(1000);

                await socket.SendAsync(new SocketAwaitable
                {
                    Buffer = new ArraySegment <byte>(bytesToSendOnConnect, 0, bytesToSendOnConnect.Length)
                });

                await Task.Delay(1000);

                server.GetSessionCount().Should().Be(1);
                serverSideSocket.Connected.Should().BeTrue();
                serverSideSocket.NoDelay.Should().BeTrue();
                serverSideSocket.SendTimeout.Should().Be(1000);

                // Send packets and verify server processes packets
                var packetToSend2 = new Packet(Command.MarketBuy);
                packetToSend2.AddString("World");
                var bytesToSecondAfterConnect = packetToSend2.GetBytes();
                await socket.SendAsync(new SocketAwaitable
                {
                    Buffer = new ArraySegment <byte>(bytesToSecondAfterConnect, 0, bytesToSecondAfterConnect.Length)
                });

                await Task.Delay(1000);

                // Stop server and verify it disconnect and releases resources
                server.Stop();

                await Task.Delay(1000);

                player.HasTwoFactorAuthenticated.Should().Be(null);

                serverSideSocket.Connected.Should().BeFalse();
                socketAwaitablePool.Count.Should().Be(10);
                buffer.AvailableBuffers.Should().Be(15);

                processor.Received(1).Execute(session, Arg.Is <Packet>(packet => packet.GetBytes().SequenceEqual(bytesToSecondAfterConnect)));
                processor.Received(1).Execute(session, Arg.Is <Packet>(packet => packet.GetBytes().SequenceEqual(bytesToSendOnConnect)));
                processor.Received(1).ExecuteEvent(session, Arg.Is <Packet>(packet => packet.Cmd == Command.OnDisconnect));
            }
            finally
            {
                server.Stop();
            }
        }
示例#6
0
 public void stopListening()
 {
     mRunning = false;
     server.Stop();
 }
示例#7
0
 public void Stop()
 {
     _server.Stop();
     _server.ClientConnected    -= new EventHandler <TcpClientConnectedEventArgs>(OnClientConnected);
     _server.ClientDisconnected -= new EventHandler <TcpClientDisconnectedEventArgs>(OnClientDisconnected);
 }
示例#8
0
 void OnApplicationQuit()
 {
     asyncServer.Stop();
 }