예제 #1
0
파일: Network.cs 프로젝트: liangyee/Wizard
        public Boolean CloseServer()
        {
            if (runState == State.Server || runState == State.None)
            {
                foreach (Player player in playerList.GetPlayers())
                {
                    try {
                        NetworkComms.SendObject("ServerStopped", player.IP, player.Port, new Player("Server", -1));
                        Thread.Sleep(SLEEP_TIME);
                    } catch (Exception e) {
                        Console.WriteLine("[CloseServer] " + e.Message);
                    }
                }

//				if (MainGame.Instance.HostOnly) baseClass.ServerStopped();
                playerList.ClearPlayers();
                Connection.StopListening();
                NetworkComms.RemoveGlobalIncomingPacketHandler();
                NetworkComms.CloseAllConnections();
//				NetworkComms.Shutdown ();
                baseClass.NetworkStopped();
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
        /// <summary>
        /// Delegate for handling incoming packets.
        /// 处理接收到的数据包   事件是在多线程中回调的,不能实现确定回调的线程
        /// </summary>
        /// <param name="packetHeader">消息包头部</param>
        /// <param name="connection">底层的连接</param>
        /// <param name="incomingObject">接收到的消息</param>
        private static void PacketHandlerAction(PacketHeader packetHeader, Connection connection, string incomingObject)
        {
            //解析数据包处理,并发送

            #region 消息处理事件

            #endregion

            Random rand = new Random();
            Console.WriteLine("接收到:" + incomingObject + ",thread id =" + Thread.CurrentThread.ManagedThreadId);
            foreach (var existCon in GetExistingConnection())
            {
                Console.WriteLine(existCon.ConnectionInfo.RemoteEndPoint);
            }
            if (rand.Next(1, 4) == 1)
            {
                Console.WriteLine("发送");
                connection.SendObject(PacketType, "接收到:" + incomingObject);
                if (rand.Next(1, 3) == 1)
                {
                    Console.WriteLine("关闭");
                    NetworkComms.CloseAllConnections(ConnectionType.TCP);
                }
            }
        }
예제 #3
0
        public void Closeconn()
        {
            //newUDPConn.CloseConnection(false);
            NetworkComms.CloseAllConnections();
            NetworkComms.RemoveGlobalIncomingPacketHandler <byte[]>("icecream", Unamangedbytevoice);
            NetworkComms.RemoveGlobalIncomingPacketHandler();
            Debug.WriteLine(NetworkComms.GlobalIncomingPacketHandlerExists("icecream"));

            NetworkComms.Shutdown();
        }
        public static void StartListener(string ip)
        {
            NetworkComms.CloseAllConnections();

            SneezeClientListener.ip = ip;
            Thread t = new Thread(GetDatabase);

            t.IsBackground = true;
            t.Name         = "Listener Thread";
            t.Start();
        }
예제 #5
0
        protected virtual void RestartAsHost(EventArgs e)
        {
            EventHandler handler = RestartAsHostEventHandler;

            NetworkComms.RemoveGlobalIncomingPacketHandler();
            NetworkComms.CloseAllConnections();

            if (handler != null)
            {
                handler(this, e);
            }
        }
예제 #6
0
파일: Network.cs 프로젝트: liangyee/Wizard
        private int InitiateConnection(Boolean isClient)
        {
            if (initialPort > 61020)
            {
                return(-1);
            }
            if (portSet)
            {
                return(listenPort);
            }
            String[] splitIP;

            try {
                Connection.StartListening(ConnectionType.TCP, new IPEndPoint(IPAddress.Any, initialPort));

                foreach (IPEndPoint localEndPoint in Connection.ExistingLocalListenEndPoints(ConnectionType.TCP, new IPEndPoint(IPAddress.Any, initialPort)))
                {
                    splitIP = localEndPoint.Address.ToString().Split('.');

                    if ((splitIP[0] == "10") || (splitIP[0] == "172" && Int32.Parse(splitIP[1]) >= 16 && Int32.Parse(splitIP[1]) <= 31) || (splitIP[0] == "192" && splitIP[1] == "168"))
                    {
                        listenPort = localEndPoint.Port;

                        if (isClient)
                        {
                            clientIP   = localEndPoint.Address.ToString();
                            clientPort = localEndPoint.Port;
                        }
                        else
                        {
                            serverIP   = localEndPoint.Address.ToString();
                            serverPort = localEndPoint.Port;
                        }

                        portSet = true;
                        return(localEndPoint.Port);
                    }
                }
            } catch (Exception) {
                Connection.StopListening();
                NetworkComms.CloseAllConnections();
                NetworkComms.Shutdown();
                initialPort += 42;
                InitiateConnection(isClient);
            }

            return(-1);
        }
예제 #7
0
 internal static void Stop()
 {
     Console.WriteLine(Resources.Server_Stop_Stop);
     ClientManager.Shutdown();
     NetworkConfig.Stop();
     foreach (var server in servers)
     {
         server.Value.Shutdown();
     }
     NetworkComms.CloseAllConnections();
     NetworkComms.Shutdown();
     NpcShopManager.Shutdown();
     ItemManager.Shutdown();
     servers.Clear();
     Console.WriteLine(Resources.Server_Stop_Success);
 }
        private static bool VerifyDatabase()
        {
            if (database == null)
            {
                return(false);
            }

            if (database.Version != SneezeDatabase.currentVersionNumber)
            {
                NetworkComms.CloseAllConnections();
                database = null;
                DatabaseError?.Invoke(DatabaseErrorType.VersionNumberConflict);
                return(false);
            }

            return(true);
        }
예제 #9
0
파일: Network.cs 프로젝트: liangyee/Wizard
        public Boolean CloseClient()
        {
            if (runState == State.Client || runState == State.None)
            {
                playerList.ClearPlayers();
                Connection.StopListening();
                NetworkComms.RemoveGlobalIncomingPacketHandler();
                NetworkComms.CloseAllConnections();
//				NetworkComms.Shutdown ();
                baseClass.NetworkStopped();
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #10
0
        public void Disconnect()
        {
            while (Peers.Count > 0)
            {
                Peers.First().DisconnectAny();
            }
            while (Trackers.Count > 0)
            {
                Trackers.First().Disconnect();
            }

            t.Stop();


            PeerDiscovery.DisableDiscoverable();
            Connection.StopListening();
            NetworkComms.CloseAllConnections();
            NetworkComms.Shutdown();

            NetworkComms.Logger.Warn("===== Client stopped =====");

            Started = false;
        }
예제 #11
0
 private void OnDestroy()
 {
     NetworkComms.CloseAllConnections();
 }
예제 #12
0
 public void Stop()
 {
     NetworkComms.CloseAllConnections();
 }
예제 #13
0
 /// <summary>
 /// 关闭所有的连接
 /// </summary>
 public static void CloseAllConnection()
 {
     NetworkComms.CloseAllConnections(ConnectionType.TCP);
 }