public static HEntityUpdate[] Parse(IHFormat format, ref ReadOnlySpan <byte> packetSpan) { var updates = new HEntityUpdate[format.Read <int>(ref packetSpan)]; for (int i = 0; i < updates.Length; i++) { updates[i] = new HEntityUpdate(format, ref packetSpan); } return(updates); }
private void OnUserStatusChanged(DataInterceptedEventArgs e) { var updates = HEntityUpdate.Parse(e.Packet); Task.Run(() => { foreach (var update in updates) { if (update.Index != userIndex || update.MovingTo == null) { return; } currentPosition = new HPoint(update.MovingTo.X, update.MovingTo.Y); } }, new CancellationToken()); }
public async void OnUserStatus(DataInterceptedEventArgs e) { if (IsStarted) { return; } HEntityUpdate[] hentityUpdateArray = HEntityUpdate.Parse(e.Packet); for (int index = 1; index < hentityUpdateArray.Length; ++index) { HEntityUpdate hupdate = hentityUpdateArray[index]; if (hupdate.Index == Users[txtUser.Value].Index) { if (checkBox1.Checked && hupdate.Action == HAction.Move) { int serverAsync4 = await Connection.SendToServerAsync(Out.RoomUserWalk, (object)(hupdate.MovingTo.X - 1), (object)hupdate.MovingTo.Y); } } hupdate = (HEntityUpdate)null; } hentityUpdateArray = (HEntityUpdate[])null; }
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); } else if (typeof(IList <HEntityUpdate>).IsAssignableFrom(parameter.ParameterType)) { args.Packet.Position = 0; values[i] = HEntityUpdate.Parse(args.Packet); } break; } } } return(values); }