private void HandleGameObjects(HPacket packet, bool isOutgoing) { packet.Position = 0; if (!isOutgoing) { if (packet.Id == In.Users) { HEntity[] entities = HEntity.Parse(packet); foreach (HEntity entity in entities) { _entities[entity.Index] = entity; } _container.OnEntitiesLoaded(entities.Length); } else if (packet.Id == In.Items) { HWallItem[] wallItems = HWallItem.Parse(packet); foreach (HWallItem wallItem in wallItems) { _wallItems[wallItem.Id] = wallItem; } _container.OnWallItemsLoaded(wallItems.Length); } else if (packet.Id == In.Objects) { HFloorItem[] floorItems = HFloorItem.Parse(packet); foreach (HFloorItem floorItem in floorItems) { _floorItems[floorItem.Id] = floorItem; } _container.OnFloorItemsLoaded(floorItems.Length); } else if (packet.Id == In.FloorHeightMap) { _entities.Clear(); _wallItems.Clear(); _floorItems.Clear(); } } packet.Position = 0; }
private object[] CreateValues(DataInterceptedEventArgs args) { ParameterInfo[] parameters = Method.GetParameters(); var values = new object[parameters.Length]; int position = 0; for (int i = 0; i < values.Length; i++) { ParameterInfo parameter = parameters[i]; switch (Type.GetTypeCode(parameter.ParameterType)) { case TypeCode.UInt16: { if (parameter.Name.Equals("id", StringComparison.OrdinalIgnoreCase)) { values[i] = args.Packet.Id; } else { values[i] = args.Packet.ReadUInt16(ref position); } break; } case TypeCode.Int32: values[i] = args.Packet.ReadInt32(ref position); break; case TypeCode.Boolean: values[i] = args.Packet.ReadBoolean(ref position); break; case TypeCode.Byte: values[i] = args.Packet.ReadByte(ref position); break; case TypeCode.String: values[i] = args.Packet.ReadUTF8(ref position); break; case TypeCode.Double: values[i] = args.Packet.ReadDouble(ref position); break; case TypeCode.Object: { if (parameter.ParameterType == typeof(DataInterceptedEventArgs)) { values[i] = args; } else if (parameter.ParameterType == typeof(HPacket)) { values[i] = args.Packet; } else if (parameter.ParameterType == typeof(HPoint)) { values[i] = new HPoint(args.Packet.ReadInt32(ref position), args.Packet.ReadInt32(ref position)); } else if (parameter.ParameterType == typeof(byte[])) { int length = args.Packet.ReadInt32(ref position); values[i] = args.Packet.ReadBytes(length, ref position); } else if (typeof(IList <HEntity>).IsAssignableFrom(parameter.ParameterType)) { args.Packet.Position = 0; values[i] = HEntity.Parse(args.Packet); } else if (typeof(IList <HFloorItem>).IsAssignableFrom(parameter.ParameterType)) { args.Packet.Position = 0; values[i] = HFloorItem.Parse(args.Packet); } else if (typeof(IList <HWallItem>).IsAssignableFrom(parameter.ParameterType)) { args.Packet.Position = 0; values[i] = HWallItem.Parse(args.Packet); } break; } } } return(values); }