Esempio n. 1
0
        private Tuple <int, long> UpdatePacketIdPair(Type packet, int newId)
        {
            var packetIdPair = getPacketId(packet, null, null);

            if (packetIdPair == null)
            {
                packetIdPair = new Tuple <int, long>(0, JavaUtil.CurrentTimeMillis());
            }
            else
            {
                if (newId == -1)
                {
                    newId = packetIdPair.Item1 + 1;
                }
                packetIdPair = new Tuple <int, long>(newId, JavaUtil.CurrentTimeMillis());
            }

            if (packetIdMap.ContainsKey(packet))
            {
                packetIdMap[packet] = packetIdPair;
            }
            else
            {
                packetIdMap.Add(packet, packetIdPair);
            }

            return(packetIdPair);
        }
Esempio n. 2
0
        public async Task sendObject(Packet packet, bool encrypt = true)
        {
            StaticHandler.Core.Logger.Debug("Sending packet {0}:{1}", packet._PacketName, encrypt.ToString());

            var(id, lastPacketSentTime) = UpdatePacketIdPair(packet.GetType(), -1);

            if (id > MaxPacketId || JavaUtil.CurrentTimeMillis() - lastPacketSentTime > 900)
            {
                UpdatePacketIdPair(packet.GetType(), 0);
            }

            if (encrypt)
            {
                await Channel.WriteAndFlushAsync(packet).ConfigureAwait(false);
            }
            else
            {
                await Channel.WriteAndFlushAsync(new UnencryptedPacketWrapper(packet,
                                                                              id)).ConfigureAwait(false);
            }
        }