Beispiel #1
0
    private void OnClickStartNewServer()
    {
        if (_playerName != null && _playerName.Length > 0)
        {
            StartNewServerEvent SNSE;
            string ipAddress = FFClient.GetLocalIP().ToString();
            SNSE.serverIpAddress = System.Net.IPAddress.Parse(ipAddress);
            SNSE.serverName      = _playerName;
            FFMessage <StartNewServerEvent> .SendToLocal(SNSE);

#if UNITY_WEBPLAYER
            // Start + Connect to local Server
            FFServer.StartServer(80, _playerName + "'s Server", true);
            FFClient.StartClient(ipAddress, 80, _playerName);
#endif

#if UNITY_STANDALONE
            // Start + Connect to local Server
            FFServer.StartServer(6532, _playerName + "'s Server", true);
            FFClient.StartClient(ipAddress, 6532, _playerName);
#endif
            ChangeLevelStateEvent CLSE;
            CLSE.newState = LevelState.In_Game;
            FFMessage <ChangeLevelStateEvent> .SendToLocal(CLSE);
        }
        else
        {
            NoticeAddPlayerName();
        }
        Debug.Log("Clicked StartNewServer"); // debug
    }
 private FFServer()
 {
     if (singleton != null)
     {
         Debug.LogError("Error created a second Singleton of FFNetServer");
         return;
     }
     singleton = this;
 }
 public static void GetReady()
 {
     if (singleton == null)
     {
         GameObject newFFServer;
         newFFServer = new GameObject("FFServer");
         singleton   = newFFServer.AddComponent <FFServer>();
         newFFServer.AddComponent <FFAction>();
     }
 }
    public static void StartServer(int portNumber, string serverName, bool serverIsClient)
    {
        FFServer.GetReady();
        if (singleton._TCPSocket != null ||
            singleton._UDPClient != null)
        {
            Debug.LogError("ERROR, Tried to make a second server with an existing one, Delete the old one first");
            return;
        }

        AddMessageInterceptors();

        if (serverIsClient)
        {
            singleton._sendToLocal = false;
        }

        singleton._serverName = serverName;
        singleton._portNumber = portNumber;


        #region SocketStart
        try
        {
            // Setup TCP
            singleton._TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            singleton._TCPSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            singleton._TCPSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ExclusiveAddressUse, false);
            singleton._TCPSocket.Bind(new IPEndPoint(IPAddress.Any, portNumber)); // TODO change to loopback?
            singleton._TCPSocket.Listen(250);
            singleton._TCPSocket.BeginAccept(new AsyncCallback(AcceptCallback), singleton._TCPSocket);

            singleton._serverStartTime = DateTime.Now.ToUniversalTime();
            singleton._serverWatch.Reset();
            singleton._serverWatch.Start();

            Debug.Log("Server Started..." +
                      "\nportNumber:" + portNumber + " serverName:" + serverName);
        }
        catch (Exception exp)
        {
            Debug.Log(exp.Message);
        }
        #endregion

        Ser_StartupEvent e;
        FFMessage <Ser_StartupEvent> .SendToLocal(e);
    }
 protected MessageInspector()
 {
     _eventType = typeof(EventType);
     _eventName = _eventType.ToString();
     FFServer.AddMessageInterceptor(this);
 }
    void OnDestroy()
    {
        /*------------------------*/
        // Close Server Connections
        /*------------------------*/
        try
        {
            if (_TCPSocket != null && _TCPSocket.IsBound && _TCPSocket.Connected)
            {
                _TCPSocket.BeginDisconnect(false, new AsyncCallback(DisconnectSocketCallbackTCP), _TCPSocket);
            }
        }
        catch (Exception exp) { Debug.LogError("Error in FFServer OnDestroy() : " + exp.Message); }

        try
        {
            if (_UDPClient != null)
            {
                _UDPClient.Close();
            }
        }
        catch (Exception exp) { Debug.LogError("Error in FFServer OnDestroy() : " + exp.Message); }
        /*------------------------*/
        // Close Client Connections
        /*------------------------*/
        try
        {
            foreach (var clientData in _clientDataList)
            {
                // TCP connection
                try
                {
                    clientData.clientSocketTCP.socket.BeginDisconnect(false,
                                                                      new AsyncCallback(DisconnectClientSocketCallbackTCP), clientData.clientSocketTCP);
                }
                catch (Exception exp) { Debug.LogError("Error in FFServer OnDestroy() : " + exp.Message); }

                // UDP Connection
                try
                {
                    clientData.clientSocketUDP.clientData        = null;
                    clientData.clientSocketUDP.socket            = null;
                    clientData.clientSocketUDP.udpClient         = null;
                    clientData.clientSocketUDP.udpEndPointLocal  = null;
                    clientData.clientSocketUDP.udpEndPointRemote = null;
                    clientData.clientSocketUDP = null;
                }
                catch (Exception exp) { Debug.LogError("Error in FFServer OnDestroy() : " + exp.Message); }
            }

            _clientData.Clear();
            _clientDataList.Clear();

            // Close shared UDPClient
            _UDPClient.Close();
            _UDPClient = null;
        }
        catch (Exception exp) { Debug.LogError("Error in FFServer OnDestroy() : " + exp.Message); }

        FFLocalEvents.TimeChangeEvent TCE;
        TCE.newCurrentTime = FFSystem.time;
        FFMessage <FFLocalEvents.TimeChangeEvent> .SendToLocal(TCE);

        Debug.Log("FFServer Destroyed");
        singleton = null;
    }