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; }