public void OnPacket(object sender, PacketReader reader) { RecvOp op = (RecvOp)reader.Read <ushort>(); IPacketHandler <T> handler = Handlers.GetValueOrDefault(op); handler?.Handle(sender as T, reader); }
private async void StartRead() { CancellationToken readToken = Source.Token; while (!readToken.IsCancellationRequested) { try { int length = await NetworkStream.ReadAsync(RecvBuffer.AsMemory(0, RecvBuffer.Length), readToken); if (length <= 0) { if (!Connected()) { return; } continue; } MapleStream.Write(RecvBuffer, 0, length); } catch (IOException) { Disconnect(); return; } catch (Exception ex) { Logger.Error(ex, "Exception reading from socket:"); 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: case RecvOp.RIDE_SYNC: case RecvOp.GUIDE_OBJECT_SYNC: case RecvOp.REQUEST_TIME_SYNC: case RecvOp.STATE: case RecvOp.STATE_FALL_DAMAGE: case RecvOp.VIBRATE: break; default: string packetString = packet.ToString(); Logger.Debug($"RECV ({recvOp}): {packetString[Math.Min(packetString.Length, 6)..]}".ColorGreen()); break; } OnPacket?.Invoke(this, packet); // handle packet }
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 } } }