예제 #1
0
 void FixedUpdate()
 {
     if (m_state != State.ST_Disconnected)
     {
         if (Sys_GetTime() - m_lstSendTime > 10 * 1000)
         {
             CmdPacket packet = new CmdPacket();
             packet.WriteUShort(Proto.Keep_Alive);
             packet.WriteUInt(Sys_GetTime());
             send(packet);
         }
         if (Sys_GetTime() - m_lstReadTime > 30 * 1000)
         {
             //dead
         }
     }
 }
예제 #2
0
    void RecvData(object sender, NetEventArgs e)
    {
        Sys_Log(getString(e.Client.RecvPacket.GetReadData()));
        m_lstReadTime = Sys_GetTime();
        UInt16    cmd    = 0;
        CmdPacket packet = e.Client.RecvPacket;

        packet.ReadUShort(out cmd);
        switch (cmd)
        {
        case Proto.Keep_Alive:
        {
            UInt32 time = 0;
            if (packet.ReadUInt(out time))
            {
                CmdPacket tpacket = new CmdPacket();
                tpacket.WriteUShort(Proto.Keep_Alive_Ack);
                tpacket.WriteUInt(time);
                send(tpacket);
            }
            break;
        }

        case Proto.Keep_Alive_Ack:
        {
            UInt32 time = 0;
            if (packet.ReadUInt(out time))
            {
                m_rtt = Sys_GetTime() - time;
            }
            break;
        }

        case Proto.Synch_Pos:
        {
            //同步位置和速度
            if (!m_game.m_bSer)
            {
                UInt64 time;
                packet.ReadUInt64(out time);
                float x, z, vx, vz;
                packet.ReadFloat(out x);
                packet.ReadFloat(out z);
                packet.ReadFloat(out vx);
                packet.ReadFloat(out vz);
                m_other.change(time, x, z, vx, vz);
            }
            break;
        }

        case Proto.C_GameShot:
        {
            //同步操作
            float vx, vz;
            packet.ReadFloat(out vx);
            packet.ReadFloat(out vz);
            //if (m_game.m_bSer)
            m_other.shot(vx, vz);
            break;
        }

        case Proto.S_GameInit:
        {
            m_state = State.ST_GameInit;
            break;
        }

        case Proto.S_GameStart:
        {
            m_state = State.ST_GameRunning;
            char bSer;
            if (packet.ReadByte(out bSer))
            {
                m_game.m_bSer = (bSer != 0);
            }
            char bottom;
            if (packet.ReadByte(out bottom))
            {
                m_game.m_bottom = (bottom != 0);
            }
            m_game.gameStart();
            break;
        }
        }
    }