예제 #1
0
        //Called everytime the main games UpdateRoutine is called
        public void UpdateNetwork()
        {
            PlayerPos.X = Player.X;
            PlayerPos.Y = Player.Y;
            //int angle = (int)((Player.Angle * 180) / Math.PI);
            Int64 angle = (Int64)(Player.Angle * 1000000000000000000);

            //If the client is chosen this will be called
            if (_client != null)
            {
                //Pump the client session with any new information sent or received
                _client.Heartbeat();
                //Initialize a new message
                NetMessage msg;
                //Message will continue you iterate though any messages received from the Server.
                while ((msg = _client.ReadMessage()) != null)
                {
                    //We Send the message of to be read and interpreted
                    HandleNetworkingMessage(msg);
                }

                // if (PlayerPos != OldPos)
                {
                    msg = new NetMessage();
                    msg.Write(angle);
                    XnaSerialization.Write(msg, PlayerPos);
                    _client.SendMessage(msg, NetChannel.ReliableUnordered);

                    OldPos = PlayerPos;
                }
            }
            //If the Server is chosen this will be called
            if (_server != null)
            {
                _server.Heartbeat();
                NetMessage msg;

                while ((msg = _server.ReadMessage()) != null)
                {
                    HandleNetworkingMessage(msg);
                }

                msg = new NetMessage();
                msg.Write(angle);
                XnaSerialization.Write(msg, PlayerPos);

                foreach (NetConnection conn in _server.Connections)
                {
                    if (conn != null && conn.Status == NetConnectionStatus.Connected)
                    {
                        _server.SendMessage(msg, conn, NetChannel.ReliableUnordered);
                    }
                }
            }
        }
예제 #2
0
 public void HandleNetworkingMessage(NetMessage msg)
 {
     //We read the Messages
     try
     {
         Int64 angle = msg.ReadInt64();
         //angle = (double)((angle * 180) / Math.PI);
         NetworkPlayer.Angle = (double)angle / 1000000000000000000;
         //NetworkPlayer.Angle = (double)((angle * 180) / Math.PI);
         NetworkPlayerPos = XnaSerialization.ReadVector2(msg);
         NetworkPlayer.X  = NetworkPlayerPos.X;
         NetworkPlayer.Y  = NetworkPlayerPos.Y;
     }
     catch (Exception)
     {
         throw;
     }
 }