示例#1
0
    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);
    }
示例#2
0
        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());
        }
示例#3
0
文件: Form1.cs 项目: mansaw12/-
 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;
 }
示例#4
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);
                    }
                    else if (typeof(IList <HEntityUpdate>).IsAssignableFrom(parameter.ParameterType))
                    {
                        args.Packet.Position = 0;
                        values[i]            = HEntityUpdate.Parse(args.Packet);
                    }
                    break;
                }
                }
            }
            return(values);
        }