示例#1
0
        protected void LateUpdate()
        {
            if (!isInitialized)
            {
                return;
            }

            //if (!isSimulated)
            //{
            //    UDPTransport.Process();
            //}
            //else
            //{
            //}
            if (isSimulated)
            {
                while (UDPTransport.ReceiveSimulatedMessage(UDPTransport.Source.Client, out int connID, out UDPTransport.TransportEvent transportEvent, out ArraySegment <byte> data))
                {
                    switch (transportEvent)
                    {
                    case UDPTransport.TransportEvent.Connected:
                        HandleConnect();
                        break;

                    case UDPTransport.TransportEvent.Data:
                        HandleData(data, 1);
                        break;

                    case UDPTransport.TransportEvent.Disconnected:
                        HandleDisconnect();
                        break;
                    }
                }
            }
        }
示例#2
0
        public bool SendSimulatedMessage(ArraySegment <byte> msg, UDPTransport.Source source)
        {
            if (!IsConnected)
            {
                return(false);
            }

            return(UDPTransport.SendSimulated(connectionID, msg, source));
        }
示例#3
0
        private void HandleDisconnect()
        {
            Status      = ConnectionStatus.Disconnected;
            IsConnected = false;
            UDPTransport.Disconnect();
            connectionID = -1;

            if (ServerPeer != null)
            {
                ServerPeer.Dispose();
                ServerPeer.IsConnected = false;
            }
            Disconnected?.Invoke();
        }
示例#4
0
        private IEnumerator WaitStartFrame()
        {
            yield return(null);

            UDPTransport.Init(true, false, isSimulated);
            if (!isSimulated)
            {
                UDPTransport.StartServer(address, port);
            }
            isInitialized = true;

            Started?.Invoke();
            isRunning = true;
            Debug.Log("Server Started");
        }
示例#5
0
        protected virtual void Start()
        {
            InitializeModules();

            UDPTransport.OnClientConnected    = HandleConnect;
            UDPTransport.OnClientDataReceived = HandleData;
            UDPTransport.OnClientDisconnected = HandleDisconnect;

            RegisterHandler(OpCode.Pong, OnHandlePong);

            if (connectOnStart)
            {
                StartCoroutine(StartConnection());
            }

            UDPTransport.Init(false, true, isSimulated);
            isInitialized = true;
        }
示例#6
0
        /// <summary>
        ///     Starts connecting to another socket with a specified timeout.
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="timeout">Milliseconds</param>
        /// <returns></returns>
        public UDPClient Connect(string ip, int port, int timeout)
        {
            connectionID       = 0;
            stopConnectingTick = Environment.TickCount + timeout;
            ConnectionIP       = ip;
            ConnectionPort     = port;


            IsConnecting = true;
            if (!isSimulated)
            {
                UDPTransport.Connect(ip, port);
            }
            else
            {
                UDPTransport.SimulatedConnect(connectionID);
                HandleConnect();
            }
            return(this);
        }
示例#7
0
        protected void OnDisable()
        {
            if (!isInitialized)
            {
                return;
            }
            if (instance != this)
            {
                return;
            }

            instance = null;

            isInitialized = false;

            handlers.Clear();

            UDPTransport.Shutdown();

            isRunning = false;
            Debug.Log("Server Shutdown");
        }
示例#8
0
        private void OnGUI()
        {
            if (!view)
            {
                return;
            }
            UDPTransport.OnLogStatistics(false, out var server, out var client);

            GUILayout.BeginArea(new Rect(8, 8, 300, 600));

            GUILayout.BeginVertical("Box");
            GUILayout.Label("SERVER");
            GUILayout.Label(server);
            GUILayout.Space(12);
            GUILayout.EndVertical();

            GUILayout.BeginVertical("Box");
            GUILayout.Label("CLIENT");
            GUILayout.Label(client);
            GUILayout.Space(12);
            GUILayout.EndVertical();

            GUILayout.EndArea();
        }
示例#9
0
 /// <summary>
 ///     Force a disconnect. Only works on the server.
 /// </summary>
 /// <param name="reason">Reason error code</param>
 public void Disconnect(int reason = 0)
 {
     IsConnected = false;
     UDPTransport.DisconnectPeer(connectionID);
 }
示例#10
0
        /// <summary>
        ///     Disconnect the <see cref="ClientSocket"/> from the <see cref="ServerSocket"/>.
        /// </summary>
        public void Disconnect()
        {
            UDPTransport.Disconnect();

            HandleDisconnect();
        }
示例#11
0
 private void OnApplicationQuit()
 {
     UDPTransport.Disconnect();
 }
示例#12
0
 internal static void NetworkLateUpdate()
 {
     UDPTransport.ClientLateUpdate();
 }
示例#13
0
 internal static void NetworkEarlyUpdate()
 {
     // process all incoming messages first before updating the world
     UDPTransport.ClientEarlyUpdate();
 }
示例#14
0
 internal static void NetworkLateUpdate()
 {
     UDPTransport.ServerLateUpdate();
 }
示例#15
0
 internal static void NetworkEarlyUpdate()
 {
     UDPTransport.ServerEarlyUpdate();
 }
示例#16
0
 public void Shutdown()
 {
     UDPTransport.Shutdown();
     isRunning = false;
 }