예제 #1
0
        public async Task SendPacketAsync(GameserverPacket sbp)
        {
            if (IsDisconnected)
            {
                return;
            }

            sbp.Write();
            byte[] data = sbp.ToByteArray();
            _crypt.Encrypt(data);
            List <byte> bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes((short)(data.Length + 2)));
            bytes.AddRange(data);

            try
            {
                await Stream.WriteAsync(bytes.ToArray(), 0, bytes.Count);

                await Stream.FlushAsync();
            }
            catch
            {
                Log.Info($"Client {Account?.AccountId} terminated.");
                CloseConnection();
            }
        }
예제 #2
0
        public void SendPacket(GameserverPacket sbp)
        {
            if (IsTerminated)
            {
                return;
            }

            sbp.Write();
            byte[] data = sbp.ToByteArray();
            _crypt.Encrypt(data);
            List <byte> bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes((short)(data.Length + 2)));
            bytes.AddRange(data);
            TrafficDown += bytes.Count;

            if (sbp is CharacterSelectionInfo)
            {
                // byte[] st = ToByteArray();
                //foreach (byte s in data)
                //    log.Info($"{ s:X2 } ");
            }

            try
            {
                Stream.Write(bytes.ToArray(), 0, bytes.Count);
                Stream.Flush();
            }
            catch
            {
                Log.Info($"client {AccountName} terminated.");
                Termination();
            }
        }