bool ReceivePacket() { byte[] packet = ReadPacket (); if (packet.Length == 0) { return false; } if (IsReplyPacket (packet)) { int id = GetPacketId (packet); ReplyCallback cb = null; lock (reply_packets_monitor) { reply_cbs.TryGetValue (id, out cb); if (cb == null) { reply_packets [id] = packet; Monitor.PulseAll (reply_packets_monitor); } else { int c = reply_cb_counts [id]; c --; if (c == 0) { reply_cbs.Remove (id); reply_cb_counts.Remove (id); } } } if (cb != null) cb.Invoke (id, packet); } else { PacketReader r = new PacketReader (packet); if (r.CommandSet == CommandSet.EVENT && r.Command == (int)CmdEvent.COMPOSITE) { int spolicy = r.ReadByte (); int nevents = r.ReadInt (); SuspendPolicy suspend_policy = decode_suspend_policy (spolicy); EventInfo[] events = new EventInfo [nevents]; for (int i = 0; i < nevents; ++i) { EventKind kind = (EventKind)r.ReadByte (); int req_id = r.ReadInt (); EventType etype = (EventType)kind; long thread_id = r.ReadId (); if (kind == EventKind.VM_START) { events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id }; //EventHandler.VMStart (req_id, thread_id, null); } else if (kind == EventKind.VM_DEATH) { int exit_code = 0; if (Version.AtLeast (2, 27)) exit_code = r.ReadInt (); //EventHandler.VMDeath (req_id, 0, null); events [i] = new EventInfo (etype, req_id) { ExitCode = exit_code }; } else if (kind == EventKind.THREAD_START) { events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = thread_id }; //EventHandler.ThreadStart (req_id, thread_id, thread_id); } else if (kind == EventKind.THREAD_DEATH) { events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = thread_id }; //EventHandler.ThreadDeath (req_id, thread_id, thread_id); } else if (kind == EventKind.ASSEMBLY_LOAD) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.AssemblyLoad (req_id, thread_id, id); } else if (kind == EventKind.ASSEMBLY_UNLOAD) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.AssemblyUnload (req_id, thread_id, id); } else if (kind == EventKind.TYPE_LOAD) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.TypeLoad (req_id, thread_id, id); } else if (kind == EventKind.METHOD_ENTRY) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.MethodEntry (req_id, thread_id, id); } else if (kind == EventKind.METHOD_EXIT) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.MethodExit (req_id, thread_id, id); } else if (kind == EventKind.BREAKPOINT) { long id = r.ReadId (); long loc = r.ReadLong (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc }; //EventHandler.Breakpoint (req_id, thread_id, id, loc); } else if (kind == EventKind.STEP) { long id = r.ReadId (); long loc = r.ReadLong (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc }; //EventHandler.Step (req_id, thread_id, id, loc); } else if (kind == EventKind.EXCEPTION) { long id = r.ReadId (); long loc = 0; // FIXME events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc }; //EventHandler.Exception (req_id, thread_id, id, loc); } else if (kind == EventKind.APPDOMAIN_CREATE) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.AppDomainCreate (req_id, thread_id, id); } else if (kind == EventKind.APPDOMAIN_UNLOAD) { long id = r.ReadId (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id }; //EventHandler.AppDomainUnload (req_id, thread_id, id); } else if (kind == EventKind.USER_BREAK) { long id = 0; long loc = 0; events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc }; //EventHandler.Exception (req_id, thread_id, id, loc); } else if (kind == EventKind.USER_LOG) { int level = r.ReadInt (); string category = r.ReadString (); string message = r.ReadString (); events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Level = level, Category = category, Message = message }; //EventHandler.Exception (req_id, thread_id, id, loc); } else if (kind == EventKind.KEEPALIVE) { events [i] = new EventInfo (etype, req_id) { }; } else { throw new NotImplementedException ("Unknown event kind: " + kind); } } EventHandler.Events (suspend_policy, events); } } return true; }
public override void Read(PacketReader stream) { Time = stream.ReadLong(); }
public override void Read(PacketReader stream) { World = stream.ReadSByte(); Unknown = stream.ReadSByte(); CreativeMode = stream.ReadSByte(); WorldHeight = stream.ReadShort(); MapSeed = stream.ReadLong(); LevelType = stream.ReadString16(9); }
public override void Read(PacketReader reader) { ProtocolOrEntityId = reader.ReadInt(); Username = reader.ReadString16(16); MapSeed = reader.ReadLong(); Level_Type = reader.ReadString16(9); ServerMode = reader.ReadInt(); Dimension = reader.ReadSByte(); Unknown = reader.ReadSByte(); WorldHeight = reader.ReadByte(); MaxPlayers = reader.ReadByte(); }
bool ReceivePacket () { byte[] packet = ReadPacket (); if (packet.Length == 0) { return false; } if (IsReplyPacket (packet)) { int id = GetPacketId (packet); ReplyCallback cb = null; lock (reply_packets_monitor) { reply_cbs.TryGetValue (id, out cb); if (cb == null) { reply_packets [id] = packet; Monitor.PulseAll (reply_packets_monitor); } } if (cb != null) cb.Invoke (id, packet); } else { PacketReader r = new PacketReader (packet); if (r.CommandSet == CommandSet.EVENT && r.Command == (int)CmdEvent.COMPOSITE) { r.ReadByte (); // suspend_policy int nevents = r.ReadInt (); for (int i = 0; i < nevents; ++i) { EventKind kind = (EventKind)r.ReadByte (); int req_id = r.ReadInt (); if (kind == EventKind.VM_START) { long thread_id = r.ReadId (); EventHandler.VMStart (req_id, thread_id, null); } else if (kind == EventKind.VM_DEATH) { EventHandler.VMDeath (req_id, 0, null); } else if (kind == EventKind.THREAD_START) { long thread_id = r.ReadId (); EventHandler.ThreadStart (req_id, thread_id, thread_id); } else if (kind == EventKind.THREAD_DEATH) { long thread_id = r.ReadId (); EventHandler.ThreadDeath (req_id, thread_id, thread_id); } else if (kind == EventKind.ASSEMBLY_LOAD) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.AssemblyLoad (req_id, thread_id, id); } else if (kind == EventKind.ASSEMBLY_UNLOAD) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.AssemblyUnload (req_id, thread_id, id); } else if (kind == EventKind.TYPE_LOAD) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.TypeLoad (req_id, thread_id, id); } else if (kind == EventKind.METHOD_ENTRY) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.MethodEntry (req_id, thread_id, id); } else if (kind == EventKind.METHOD_EXIT) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.MethodExit (req_id, thread_id, id); } else if (kind == EventKind.BREAKPOINT) { long thread_id = r.ReadId (); long id = r.ReadId (); long loc = r.ReadLong (); EventHandler.Breakpoint (req_id, thread_id, id, loc); } else if (kind == EventKind.STEP) { long thread_id = r.ReadId (); long id = r.ReadId (); long loc = r.ReadLong (); EventHandler.Step (req_id, thread_id, id, loc); } else if (kind == EventKind.EXCEPTION) { long thread_id = r.ReadId (); long id = r.ReadId (); long loc = 0; // FIXME EventHandler.Exception (req_id, thread_id, id, loc); } else if (kind == EventKind.APPDOMAIN_CREATE) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.AppDomainCreate (req_id, thread_id, id); } else if (kind == EventKind.APPDOMAIN_UNLOAD) { long thread_id = r.ReadId (); long id = r.ReadId (); EventHandler.AppDomainUnload (req_id, thread_id, id); } else { throw new NotImplementedException ("Unknown event kind: " + kind); } } } } return true; }
private bool ParseData(byte[] data) { var reader = new PacketReader(data); var header = reader.ReadLong(); var id = reader.ReadLong(); logger.Debug("ID: {0}", id); if (IsIncorrectId(id)) { return false; } this.id = id; totalNumberOfParts = reader.ReadByte(); logger.Debug("TOTAL PARTS: {0}", totalNumberOfParts); var number = reader.ReadByte(); logger.Debug("NUMBER: {0}", number); size = reader.ReadShort(); logger.Debug("SIZE: {0}", size); //if (number == 0 && IsPacketCompressed()) //{ // uncompressedSize = reader.ReadLong(); // logger.Debug("USIZE: {0}", uncompressedSize); // checkSum = reader.ReadLong(); // logger.Debug("SUM: {0}", checkSum); //} if (number == 0) { var strangeNumberInFirstPacket = reader.ReadLong(); logger.Debug("Strange number: {0}", strangeNumberInFirstPacket); } var payloadPart = reader.GetRest(); parts.Add(new PacketPartData { Number = number, Data = payloadPart }); logger.Debug("END PART"); return true; }