public void Write(NetBuff buffer) { buffer.WriteInt(PlayerList.Count); for (int i = 0; i < PlayerList.Count; i++) { buffer.WriteInt(PlayerList[i]); } }
public override void Write(NetBuff buffer) { base.Write(buffer); buffer.WriteInt(PlayerId); buffer.WriteInt(CurFrame); buffer.WriteInt(OperationData.PlayerId); buffer.WriteInt((int)OperationData.Operation); }
public override void Read(NetBuff buffer) { base.Read(buffer); PlayerId = buffer.ReadInt(); CurFrame = buffer.ReadInt(); OperationData.PlayerId = buffer.ReadInt(); OperationData.Operation = (EmOperation)buffer.ReadInt(); }
public void Read(NetBuff buffer) { int n = buffer.ReadInt(); for (int i = 0; i < n; i++) { PlayerList.Add(buffer.ReadInt()); } }
public override void Write(NetBuff buffer) { base.Write(buffer); buffer.WriteInt(FrameDatas.Count); for (int i = 0; i < FrameDatas.Count; i++) { var frame = FrameDatas[i]; buffer.WriteInt(frame.Frame); buffer.WriteInt(frame.OperationDatas.Count); for (int j = 0; j < frame.OperationDatas.Count; j++) { buffer.WriteInt(frame.OperationDatas[j].PlayerId); buffer.WriteInt((int)frame.OperationDatas[j].Operation); } } }
private static void SendMsg(NetBuff buffer, NetMessageBase msg) { buffer.Reset(); msg.Write(buffer); for (int i = 0; i < playerList.Count; i++) { var info = playerList[i]; if (!info.IsDisconnected) { try { info.Socket.Send(buffer.DataBuffer); } catch (Exception e) { info.IsDisconnected = true; throw; } } } }
public override void Read(NetBuff buffer) { base.Read(buffer); int frameCount = buffer.ReadInt(); for (int i = 0; i < frameCount; i++) { FrameData frame = new FrameData(); frame.Frame = buffer.ReadInt(); FrameDatas.Add(frame); int operationCount = buffer.ReadInt(); for (int j = 0; j < operationCount; j++) { OperationData operation = new OperationData(); operation.PlayerId = buffer.ReadInt(); operation.Operation = (EmOperation)buffer.ReadInt(); frame.OperationDatas.Add(operation); } } }
private static void SendMsg(NetBuff buffer, FrameData curFrameData) { NetSCSynchronizateMsg msg = new NetSCSynchronizateMsg(); for (int i = 0; i < playerList.Count; i++) { var info = playerList[i]; if (!info.IsDisconnected) { msg.FrameDatas.Clear(); //补上差的帧 for (int k = info.CurFrame + 1; k < curFrame; k++) { var f = historyFrameDatas.Find(o => o.Frame == k); if (f != null) { msg.FrameDatas.Add(f); } } msg.FrameDatas.Add(curFrameData); buffer.Reset(); msg.Write(buffer); try { info.Socket.Send(buffer.DataBuffer); } catch (Exception e) { info.IsDisconnected = true; throw; } } } }
public virtual void Write(NetBuff buffer) { int n = (int)MessageType; buffer.WriteInt(n); }
public virtual void Read(NetBuff buffer) { int n = buffer.ReadInt(); MessageType = (EmNetMessageType)n; }
public override void Write(NetBuff buffer) { base.Write(buffer); buffer.WriteInt(PlayerId); }
public override void Read(NetBuff buffer) { base.Read(buffer); PlayerId = buffer.ReadInt(); }
public override void Write(NetBuff buffer) { base.Write(buffer); }
public override void Read(NetBuff buffer) { base.Read(buffer); }
public override void Read(NetBuff buffer) { base.Read(buffer); PlayerList.Read(buffer); }
public override void Write(NetBuff buffer) { base.Write(buffer); PlayerList.Write(buffer); }
static void ServerSyncThread() { NetBuff writeBuffer = new NetBuff(); //使用心跳检查客户端是否存活 while (true) { //发送同步消息 if (!isStart) { if (inputChar == 'a' || inputChar == 'A') { NetSCSynchronizateStartMsg msg = new NetSCSynchronizateStartMsg(); SendMsg(writeBuffer, msg); isStart = true; } Thread.Sleep(10); continue; } if (playerList.Count == 0) { isStart = false; Thread.Sleep(10); continue; } bool isOk = true && playerList.Count > 0; bool isWaitSomeOne = false; for (int i = 0; i < playerList.Count; i++) { if (!playerList[i].IsDisconnected && !playerList[i].IsOperationReceived) { isOk = false; } if (curFrame - playerList[i].CurFrame >= FORWARD_FRAME_COUNT) { isWaitSomeOne = true; } } if (!isWaitSomeOne && (isOk || !forceSync)) { //开始一帧 curFrame++; Console.WriteLine("start frame " + curFrame); //生成消息 var frameData = new FrameData(); frameData.Frame = curFrame; for (int i = 0; i < playerList.Count; i++) { if (!playerList[i].IsDisconnected && playerList[i].OperationData != null) { frameData.OperationDatas.Add(playerList[i].OperationData); playerList[i].OperationData = null; playerList[i].IsOperationReceived = false; } } historyFrameDatas.Add(frameData); if (historyFrameDatas.Count >= 200) { historyFrameDatas.RemoveAt(0); } SendMsg(writeBuffer, frameData); Console.WriteLine("send msg finish"); } Thread.Sleep(DELTA_TIME); } }