private void EncodeVoltron(IoSession session, object message, IProtocolEncoderOutput output) { IVoltronPacket voltronPacket = (IVoltronPacket)message; VoltronPacketType voltronPacketType = voltronPacket.GetPacketType(); EncodeVoltronStylePackets(session, output, AriesPacketType.Voltron, voltronPacketType.GetPacketCode(), voltronPacket); }
private void ParsePacket() { /** Can we parse it? **/ try { var packet = Packet.Packet; if (packet.Type == PacketType.VOLTRON) { var voltronClazz = VoltronPackets.GetByPacketCode((ushort)packet.SubType); if (voltronClazz != null) { IVoltronPacket parsed = (IVoltronPacket)Activator.CreateInstance(voltronClazz); //TODO: VoltronContext parsed.Deserialize(IoBuffer.Wrap(GetBytes()), Context); this.ParsedPacket = parsed; this.parsedInspetor.SelectedObject = ParsedPacket; } } else if (packet.Type == PacketType.ARIES) { var ariesClazz = AriesPackets.GetByPacketCode(packet.SubType); if (ariesClazz != null) { IAriesPacket parsed = (IAriesPacket)Activator.CreateInstance(ariesClazz); parsed.Deserialize(IoBuffer.Wrap(GetBytes()), Context); this.ParsedPacket = parsed; this.parsedInspetor.SelectedObject = ParsedPacket; } } } catch (Exception ex) { } }
static VoltronPackets() { VOLTRON_PACKET_BY_TYPEID = new Dictionary <ushort, Type>(); foreach (Type packetType in VOLTRON_PACKETS) { IVoltronPacket packet = (IVoltronPacket)Activator.CreateInstance(packetType); VOLTRON_PACKET_BY_TYPEID.Add(packet.GetPacketType().GetPacketCode(), packetType); } }
public override void MessageSent(INextFilter nextFilter, IoSession session, IWriteRequest writeRequest) { IVoltronPacket voltronPacket = writeRequest.OriginalRequest.Message as IVoltronPacket; if (voltronPacket != null) { var voltronBuffer = IoBuffer.Allocate(512); voltronBuffer.Order = ByteOrder.BigEndian; voltronBuffer.AutoExpand = true; voltronPacket.Serialize(voltronBuffer, Context); voltronBuffer.Flip(); var byteArray = new byte[voltronBuffer.Remaining]; voltronBuffer.Get(byteArray, 0, voltronBuffer.Remaining); PacketLogger.OnPacket(new Packet { Data = byteArray, Type = PacketType.VOLTRON, SubType = voltronPacket.GetPacketType().GetPacketCode(), Direction = PacketDirection.OUTPUT }); nextFilter.MessageSent(session, writeRequest); return; } IAriesPacket ariesPacket = writeRequest.OriginalRequest.Message as IAriesPacket; if (ariesPacket != null) { IoBuffer ariesBuffer = IoBuffer.Allocate(128); ariesBuffer.AutoExpand = true; ariesBuffer.Order = ByteOrder.LittleEndian; ariesPacket.Serialize(ariesBuffer, Context); ariesBuffer.Flip(); var byteArray = new byte[ariesBuffer.Remaining]; ariesBuffer.Get(byteArray, 0, ariesBuffer.Remaining); PacketLogger.OnPacket(new Packet { Data = byteArray, Type = PacketType.ARIES, SubType = ariesPacket.GetPacketType().GetPacketCode(), Direction = PacketDirection.OUTPUT }); nextFilter.MessageSent(session, writeRequest); return; } IoBuffer buffer = writeRequest.Message as IoBuffer; if (buffer == null) { nextFilter.MessageSent(session, writeRequest); return; } TryParseAriesFrame(buffer, PacketDirection.OUTPUT); nextFilter.MessageSent(session, writeRequest); }