예제 #1
0
        public void StartServer()
        {
            if (PongNetworkManager.StartServer(SV_OnDisconnected) < 0)
            {
                PromptMessage = "Failed to start server. Press Esc and try to host game again";
                return;
            }

            NetworkServer.RegisterHandler(PongMsgType.CheckProto, m =>
            {
                if (EnemyConn != null && m.conn != EnemyConn)
                {
                    //There can be only ONE
                    m.conn.Disconnect();
                    return;
                }
                EnemyConn     = m.conn;
                PromptMessage = "";
                Ready         = true;
            });

            NetworkServer.RegisterHandler(PongMsgType.PlayerInput, m =>
            {
                var msg = m.ReadMessage <InputMessage>();
                PongGame.Instance.ApplyPlayerInput(msg);
            });
        }
예제 #2
0
 private void Start()
 {
     if (instance == null)
     {
         instance = this;
     }
 }
예제 #3
0
 public void ServerUpdate()
 {
     m_updateTimer += Time.deltaTime;
     if (m_updateTimer > m_updateRate)
     {
         PongNetworkManager.SendToClients(PongMsgType.Snapshot, CreatePongSnapshot(), NetworkConfiguration.ChannelUnreliableSequenced);
         m_updateTimer = 0;
     }
 }
예제 #4
0
 public void ClientUpdate()
 {
     m_updateTimer += Time.deltaTime;
     if (m_updateTimer > m_updateRate)
     {
         PongNetworkManager.SendToServer(PongMsgType.PlayerInput, new InputMessage()
         {
             MouseXPos = Camera.main.ScreenToWorldPoint(Input.mousePosition).x,
             TS        = Time.time
         }, NetworkConfiguration.ChannelUnreliableSequenced);
         m_updateTimer = 0;
     }
 }
예제 #5
0
        public void Shutdown()
        {
            if (PongGame.Instance.IsClient)
            {
                PongNetworkManager.CL_Shutdown();
            }
            else if (PongGame.Instance.IsHost)
            {
                PongNetworkManager.SV_Shutdown();
            }

            return;
        }
예제 #6
0
        private void CreateRandomBall()
        {
            var ballIndex = Random.Range(0, m_ballPrefabs.Count);

            m_gameBall = Instantiate(m_ballPrefabs[ballIndex]);

            if (IsHost)
            {
                //TODO move it some place else
                PongNetworkManager.SendToClients(PongMsgType.ResetBall, new ResetBallMessage()
                {
                    BallIndx = ballIndex
                }, NetworkConfiguration.ChannelReliableSequenced);
            }
        }
예제 #7
0
        public void StartClient()
        {
            var address = PongNetworkManager.DEFAULT_ADDRESS;

            if (!string.IsNullOrEmpty(Core.GameCore.Instance.PongSettings.ConnectionAddress))
            {
                address = Core.GameCore.Instance.PongSettings.ConnectionAddress;
            }
            var client = PongNetworkManager.ConnectClient(address, PongNetworkManager.PORT, CL_OnConnected, CL_OnDisconnected);

            client.RegisterHandler(PongMsgType.Snapshot, m =>
            {
                var msg = m.ReadMessage <SnapshotMessage>();
                PongGame.Instance.ApplySnapshot(msg);
            });

            client.RegisterHandler(PongMsgType.ResetBall, m =>
            {
                var msg = m.ReadMessage <ResetBallMessage>();
                PongGame.Instance.OnResetBall(msg);
            });
        }
예제 #8
0
 void Start()
 {
     scoreManager   = FindObjectOfType <ScoreManager> ();
     rigidBody      = GetComponent <Rigidbody2D> ();
     networkManager = FindObjectOfType <PongNetworkManager> ();
 }
예제 #9
0
 private void CL_OnConnected(NetworkConnection conn)
 {
     PongNetworkManager.SendToServer(PongMsgType.CheckProto, null, NetworkConfiguration.ChannelReliable);
     PromptMessage = "";
     Ready         = true;
 }