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