예제 #1
0
 public bool ReliableMessageCheck(VNetMessage message)
 {
     if (message.GetReliableIndex() == -1)
     {
         return(false);
     }
     if (m_lastReliableRecvdIndex != message.GetReliableIndex() - 1)
     {
         return(true);
     }
     m_lastReliableRecvdIndex++;
     return(false);
 }
예제 #2
0
        public void HandlePacketIn(VNetPacket packet, VNetClient client)
        {
            int numMessagesToRead = packet.header.numMessages;

            packet.StartPacketRead();

            Dictionary <int, VNetMessage> reliableIn = new Dictionary <int, VNetMessage>();

            while (numMessagesToRead-- > 0)
            {
                if (packet.UpdateNextMessageHeaders() == false)
                {
                    break;
                }

                if (m_register.ContainsKey(packet.m_nextMessageType.checksum) == false)
                {
                    packet.SkipNextMessage();
                }
                else
                {
                    VNetDispatchRegistryBase reg = m_register[packet.m_nextMessageType.checksum];
                    if (reg.GetNumCallbacks() == 0)
                    {
                        packet.SkipNextMessage();
                    }
                    else
                    {
                        VNetMessage message = reg.ConvertDataToMessage(packet);
                        message._client    = client;
                        message._packet    = packet;
                        message.__typeName = new VNetStringChksum(packet.m_nextMessageType.checksum);


                        if (message.GetReliableIndex() != -1)
                        {
                            if (reliableIn.ContainsKey(message.GetReliableIndex()))
                            {
                                continue;
                            }
                            reliableIn.Add(message.GetReliableIndex(), message);
                            continue;
                        }

                        reg.Callback(message);
                    }
                }
            }
            if (client != null)
            {
                while (reliableIn.ContainsKey(client.GetNextReliableIndex()))
                {
                    VNetMessage message = reliableIn[client.GetNextReliableIndex()];
                    client.ReliableMessageCheck(message);

                    VNetDispatchRegistryBase reg = m_register[message.GetMessageType().checksum];
                    reg.Callback(message);
                }
            }

            reliableIn.Clear();
        }