解决方案资源管理器—解决方案“MyGameServer”—右键—添加—新建项—文件夹
命名为:
Threads
解决方案资源管理器—解决方案“MyGameServer”—Threads—右键—添加—新建项—类库
命名为:
SyncPositionThread.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Common;
using System.Xml.Serialization;
using System.IO;
using Photon.SocketServer;
//线程
namespace MyGameServer.Threads
{
public class SyncPositionThread
{
private Thread t;
//开启线程
public void Run()
{
t = new Thread(UpdatePosition);
t.IsBackground = true;
t.Start();
}
//停止线程
public void Stop()
{
t.Abort();
}
private void UpdatePosition()
{
Thread.Sleep(5000);//休息5秒
while (true)
{
Thread.Sleep(200);//休息0.2秒
//进行同步
SendPosition();
}
}
//发送位置
private void SendPosition()
{
//封装位置信息
List<PlayerData> playerDataList = new List<PlayerData>();
foreach (ClientPeer peer in MyGameServer.Instance.peerList)//遍历所有客户端
{
if (string.IsNullOrEmpty(peer.username) == false)
{
PlayerData playerData = new PlayerData();//实例化
playerData.Username = peer.username;//用户名
playerData.Pos = new Vector3Data() { x = peer.x, y = peer.y, z = peer.z };//位置
playerDataList.Add(playerData);//放入集合
}
}
StringWriter sw = new StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(List<PlayerData>));
serializer.Serialize(sw, playerDataList);
sw.Close();
string playerDataListString = sw.ToString();
Dictionary<byte, object> data = new Dictionary<byte, object>();
data.Add((byte)ParameterCode.PlayerDataList, playerDataListString);
foreach (ClientPeer peer in MyGameServer.Instance.peerList)
{
if (string.IsNullOrEmpty(peer.username) == false)
{
EventData ed = new EventData((byte) EventCode.SyncPosition );//实例化
ed.Parameters=data;
peer.SendEvent(ed, new SendParameters());
}
}
}
}
}