using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
namespace Multiplayer
|
|
{
|
|
|
|
public class PlayerServerManager
|
|
{
|
|
|
|
private ServerManager ServerManager;
|
|
|
|
public PlayerServerManager(ServerManager ServerManager)
|
|
{
|
|
this.ServerManager = ServerManager;
|
|
RegisterHandlers();
|
|
}
|
|
|
|
private void RegisterHandlers()
|
|
{
|
|
ServerManager.Server.RegisterHandler(PlayerMsgID.Position, RecievePosition);
|
|
ServerManager.Server.RegisterHandler(PlayerMsgID.QueryPosition, QueryPosition);
|
|
}
|
|
|
|
private void RecievePosition(NetworkMessage msg)
|
|
{
|
|
VectorMsg vectorMsg;
|
|
if (!Utility.ReadMessage<VectorMsg>(msg, out vectorMsg))
|
|
return;
|
|
|
|
if (!ServerManager.AllPlayers.ContainsKey(vectorMsg.ID))
|
|
{
|
|
Debug.Log("Recieved position from unknown player");
|
|
return;
|
|
}
|
|
|
|
Player player = ServerManager.AllPlayers[vectorMsg.ID];
|
|
player.Position = vectorMsg.vector;
|
|
|
|
foreach(Player otherPlayer in ServerManager.AllPlayers.Values)
|
|
{
|
|
if (otherPlayer.Equals(player))
|
|
continue;
|
|
|
|
otherPlayer.Connection.Send(PlayerMsgID.Position, vectorMsg);
|
|
}
|
|
}
|
|
|
|
private void QueryPosition(NetworkMessage msg)
|
|
{
|
|
PlayerMsg playerMsg;
|
|
if (!Utility.ReadMessage<PlayerMsg>(msg, out playerMsg))
|
|
return;
|
|
|
|
if (!ServerManager.AllPlayers.ContainsKey(playerMsg.ID))
|
|
{
|
|
Debug.Log("Recieved query from unknown player");
|
|
return;
|
|
}
|
|
|
|
Player player = ServerManager.AllPlayers[playerMsg.ID];
|
|
|
|
foreach (Player otherPlayer in ServerManager.AllPlayers.Values)
|
|
{
|
|
if (otherPlayer.Equals(player))
|
|
continue;
|
|
|
|
VectorMsg vectorMsg = new VectorMsg(otherPlayer.ID, otherPlayer.Position);
|
|
player.Connection.Send(PlayerMsgID.Position, vectorMsg);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|