坦克大戰 八 網路模組:伺服器
協議:
//新增玩家
public void AddPlayer(string id)
{
lock (list)
{//給每一個連進來來的玩家都new一個自己的資料類 儲存自己的資訊
ScenePlayer p = new ScenePlayer();
p.id = id;
list.Add(p);
}-
}
//傳送列表
public void SendPlayerList(Player player)
{
int count = list.Count;
ProtocolBytes protocol = new ProtocolBytes();
protocol.AddString("GetList");
protocol.AddInt(count);
for (int i = 0; i < count; i++)
{
ScenePlayer p = list[i];
protocol.AddString(p.id);
protocol.AddFloat(p.x);
protocol.AddFloat(p.y);
protocol.AddFloat(p.z);
protocol.AddInt(p.score);
}
player.Send(protocol);
}
//更新資訊
public void UpdateInfo(string id, float x, float y, float z, int score)
{
int count = list.Count;
ProtocolBytes protocol = new ProtocolBytes();
ScenePlayer p = GetScenePlayer(id);//到玩家集合裡獲取玩家
if (p == null)
return;
p.x = x;
p.y = y;
p.z = z;
p.score = score;
}
HandlePlayerMsg
{
//獲取分數
//協議引數:
//返回協議:int分數
public void MsgGetScore(Player player, ProtocolBase protoBase)
{
ProtocolBytes protocolRet = new ProtocolBytes ();
protocolRet.AddString ("GetScore");
protocolRet.AddInt (player.data.score);
player.Send (protocolRet);
Console.WriteLine ("MsgGetScore " + player.id + player.data.score);
}
//增加分數
//協議引數:
public void MsgAddScore(Player player, ProtocolBase protoBase)
{
//獲取數值
int start = 0;
ProtocolBytes protocol = (ProtocolBytes)protoBase;
string protoName = protocol.GetString (start, ref start);
//處理
player.data.score += 1;
Console.WriteLine ("MsgAddScore " + player.id + " " + player.data.score.ToString ());
}
//獲取玩家列表
public void MsgGetList(Player player, ProtocolBase protoBase)
{
Scene.instance.SendPlayerList (player);
}
-
//更新資訊
public void MsgUpdateInfo(Player player, ProtocolBase protoBase)
{
//獲取數值
int start = 0;
ProtocolBytes protocol = (ProtocolBytes)protoBase;
string protoName = protocol.GetString (start, ref start);
float x = protocol.GetFloat (start, ref start);
float y = protocol.GetFloat (start, ref start);
float z = protocol.GetFloat (start, ref start);
int score = player.data.score;
//更新資訊服務端村玩家資訊的資料類
Scene.instance.UpdateInfo (player.id, x, y, z, score);
//廣播 傳送
ProtocolBytes protocolRet = new ProtocolBytes();
protocolRet.AddString ("UpdateInfo");
protocolRet.AddString (player.id);
protocolRet.AddFloat (x);
protocolRet.AddFloat (y);
protocolRet.AddFloat (z);
protocolRet.AddInt (score);
ServNet.instance.Broadcast (protocolRet);
}
}