コード例 #1
0
		public BaseObject(int memoryAddress, ArraySegment<byte> originalBytes, IVersion version)
		{
			MemoryAddress = memoryAddress;
			OriginalBytes = originalBytes;
			DatabaseMode = DatabaseModeEnum.Cached;
			Version = version;
		}
コード例 #2
0
ファイル: BaseObject.cs プロジェクト: ryanbb/FMScoutFramework
 public BaseObject(int memoryAddress, ArraySegment <byte> originalBytes, IVersion version)
 {
     MemoryAddress = memoryAddress;
     OriginalBytes = originalBytes;
     DatabaseMode  = DatabaseModeEnum.Cached;
     Version       = version;
 }
コード例 #3
0
        public ObjectManager(GameManager gameManager, DatabaseModeEnum databaseMode)
        {
            DatabaseMode = databaseMode;
            GameManager  = gameManager;

            if (!ObjectManagerWrapper.ObjectManagers.ContainsKey(databaseMode))
            {
                ObjectManagerWrapper.ObjectManagers.Add(databaseMode, null);
            }
            ObjectManagerWrapper.ObjectManagers [databaseMode] = this;
        }
コード例 #4
0
        public static void Set <T>(int offset, ArraySegment <byte> baseObject, int memoryAddress, DatabaseModeEnum databaseMode, T value)
        {
            if (databaseMode == DatabaseModeEnum.Cached)
            {
                throw new NotImplementedException();
            }
            else
            {
                int offsetToFind = memoryAddress + offset;

                if (typeof(Int16) == typeof(T))
                {
                    ProcessManager.WriteInt16((short)(object)value, offsetToFind);
                }
                else if (typeof(Byte) == typeof(T))
                {
                    ProcessManager.WriteByte((byte)(object)value, offsetToFind);
                }
                else if (typeof(DateTime) == typeof(T))
                {
                    ProcessManager.WriteDateTime((DateTime)(object)value, offsetToFind);
                }
                else if (typeof(Int32) == typeof(T))
                {
                    ProcessManager.WriteInt32((int)(object)value, offsetToFind);
                }
                else if (typeof(SByte) == typeof(T))
                {
                    ProcessManager.WriteSByte((sbyte)(object)value, offsetToFind);
                }
                else if (typeof(float) == typeof(T))
                {
                    ProcessManager.WriteFloat((float)(object)value, offsetToFind);
                }
                else if (typeof(UInt32) == typeof(T))
                {
                    ProcessManager.WriteInt32((int)(object)value, offsetToFind);
                }
                else if (typeof(ushort) == typeof(T))
                {
                    ProcessManager.WriteInt16((ushort)(object)value, offsetToFind);
                }
            }
        }
コード例 #5
0
        public static T GetPointer <T>(int offset, ArraySegment <byte> baseObject, int memoryAddress, DatabaseModeEnum databaseMode, IVersion version)
            where T : class
        {
            if (databaseMode == DatabaseModeEnum.Cached)
            {
                int memAddress  = ProcessManager.ReadInt32(baseObject.Array, offset + baseObject.Offset);
                var objectStore = ((Dictionary <int, T>)ObjectManagerWrapper.ObjectManagers [databaseMode].ObjectStore [typeof(T)]);
                if (objectStore.ContainsKey(memAddress))
                {
                    return(objectStore [memAddress] as T);
                }
                else
                {
                    return(default(T));
                }
            }
            else
            {
                int memAddress = memoryAddress + offset;

                /*
                 * if (typeof(T) == typeof(Contract))
                 *      memAddress = ProcessManager.ReadInt32 (memAddress); */

                if (!pointerDelegateDictionary.ContainsKey(typeof(T)))
                {
                    System.Reflection.ConstructorInfo ci =
                        typeof(T).GetConstructor(new[] { typeof(int), typeof(IVersion) });

                    ParameterExpression memAddressParam = Expression.Parameter(typeof(int), "memAdd");
                    ParameterExpression versionParam    = Expression.Parameter(typeof(IVersion), "version");

                    LambdaExpression lambda = Expression.Lambda(
                        Expression.Convert(Expression.New(ci, memAddressParam, versionParam), typeof(object))
                        , memAddressParam, versionParam);

                    lock (pointerDelegateLock) {
                        if (!pointerDelegateDictionary.ContainsKey(typeof(T)))
                        {
                            pointerDelegateDictionary.Add(typeof(T),
                                                          (Func <int, IVersion, object>)lambda.Compile());
                        }
                    }
                }
                return((T)pointerDelegateDictionary [typeof(T)].Invoke(ProcessManager.ReadInt32(memAddress), version));
            }
        }
コード例 #6
0
 public static string GetString(int offset, int additionalStringOffset, ArraySegment <byte> baseObject, int memoryAddress, DatabaseModeEnum databaseMode)
 {
     if (databaseMode == DatabaseModeEnum.Cached)
     {
         return(ProcessManager.ReadString(baseObject, offset, additionalStringOffset));
     }
     else             // realtime
     {
         return(ProcessManager.ReadString(memoryAddress + offset, additionalStringOffset));
     }
 }
コード例 #7
0
        public static T Get <T>(int offset, ArraySegment <byte> baseObject, int memoryAddress, DatabaseModeEnum databaseMode)
        {
            if (databaseMode == DatabaseModeEnum.Cached)
            {
                return((T)ProcessManager.ReadFromBuffer(baseObject.Array, baseObject.Offset + offset, typeof(T)));
            }
            else               // realtime
            {
                int offsetToFind = memoryAddress + offset;

                if (typeof(Int16) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadInt16(offsetToFind));
                }
                else if (typeof(Byte) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadByte(offsetToFind));
                }
                else if (typeof(DateTime) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadDateTime(offsetToFind));
                }
                else if (typeof(Int32) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadInt32(offsetToFind));
                }
                else if (typeof(SByte) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadSByte(offsetToFind));
                }
                else if (typeof(float) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadFloat(offsetToFind));
                }
                else if (typeof(UInt32) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadUInt32(offsetToFind));
                }
                else if (typeof(ushort) == typeof(T))
                {
                    return((T)(object)ProcessManager.ReadUInt16(offsetToFind));
                }
                else
                {
                    return(default(T));
                }
            }
        }
コード例 #8
0
		public BaseObject (int memoryAddress, IVersion version)
		{
			MemoryAddress = memoryAddress;
			Version = version;
			DatabaseMode = DatabaseModeEnum.Realtime;
		}
コード例 #9
0
ファイル: BaseObject.cs プロジェクト: ryanbb/FMScoutFramework
 public BaseObject(int memoryAddress, IVersion version)
 {
     MemoryAddress = memoryAddress;
     Version       = version;
     DatabaseMode  = DatabaseModeEnum.Realtime;
 }
コード例 #10
0
ファイル: FMCore.cs プロジェクト: ryanbb/FMScoutFramework
 public FMCore(DatabaseModeEnum databaseMode)
 {
     DatabaseMode = databaseMode;
 }