示例#1
0
 public void Write(NetBuff buffer)
 {
     buffer.WriteInt(PlayerList.Count);
     for (int i = 0; i < PlayerList.Count; i++)
     {
         buffer.WriteInt(PlayerList[i]);
     }
 }
示例#2
0
    public override void Write(NetBuff buffer)
    {
        base.Write(buffer);

        buffer.WriteInt(PlayerId);
        buffer.WriteInt(CurFrame);
        buffer.WriteInt(OperationData.PlayerId);
        buffer.WriteInt((int)OperationData.Operation);
    }
示例#3
0
    public override void Read(NetBuff buffer)
    {
        base.Read(buffer);

        PlayerId = buffer.ReadInt();
        CurFrame = buffer.ReadInt();
        OperationData.PlayerId  = buffer.ReadInt();
        OperationData.Operation = (EmOperation)buffer.ReadInt();
    }
示例#4
0
    public void Read(NetBuff buffer)
    {
        int n = buffer.ReadInt();

        for (int i = 0; i < n; i++)
        {
            PlayerList.Add(buffer.ReadInt());
        }
    }
示例#5
0
    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);
            }
        }
    }
示例#6
0
 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;
             }
         }
     }
 }
示例#7
0
    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);
            }
        }
    }
示例#8
0
        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;
                    }
                }
            }
        }
示例#9
0
    public virtual void Write(NetBuff buffer)
    {
        int n = (int)MessageType;

        buffer.WriteInt(n);
    }
示例#10
0
    public virtual void Read(NetBuff buffer)
    {
        int n = buffer.ReadInt();

        MessageType = (EmNetMessageType)n;
    }
示例#11
0
    public override void Write(NetBuff buffer)
    {
        base.Write(buffer);

        buffer.WriteInt(PlayerId);
    }
示例#12
0
    public override void Read(NetBuff buffer)
    {
        base.Read(buffer);

        PlayerId = buffer.ReadInt();
    }
示例#13
0
 public override void Write(NetBuff buffer)
 {
     base.Write(buffer);
 }
示例#14
0
 public override void Read(NetBuff buffer)
 {
     base.Read(buffer);
 }
示例#15
0
 public override void Read(NetBuff buffer)
 {
     base.Read(buffer);
     PlayerList.Read(buffer);
 }
示例#16
0
 public override void Write(NetBuff buffer)
 {
     base.Write(buffer);
     PlayerList.Write(buffer);
 }
示例#17
0
        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);
            }
        }