private async void StartRead() { CancellationToken readToken = source.Token; while (!readToken.IsCancellationRequested) { try { int length = await networkStream.ReadAsync(recvBuffer, 0, recvBuffer.Length, readToken); if (length <= 0) { if (!Connected()) { return; } continue; } mapleStream.Write(recvBuffer, 0, length); } catch (IOException ex) { logger.Error("Exception reading from socket: ", ex); return; } while (mapleStream.TryRead(out byte[] packetBuffer)) { Packet packet = recvCipher.Transform(packetBuffer); short opcode = packet.Reader().ReadShort(); RecvOp recvOp = (RecvOp)opcode; switch (recvOp) { case RecvOp.USER_SYNC: case RecvOp.KEY_TABLE: break; default: string packetString = packet.ToString(); logger.Debug($"RECV ({recvOp.ToString()}): {packetString.Substring(Math.Min(packetString.Length, 6))}".Pastel("#8CC265")); break; } OnPacket?.Invoke(this, packet); // handle packet } } }