/// <summary>
        /// Creates a new instance of this type.
        /// </summary>
        /// <param name="namePtr">Pointer to ASCIIZ string that is a name of the event.</param>
        /// <param name="eventType">Type of the event.</param>
        /// <param name="valuePtr">Pointer to the value of the event.</param>
        public EntityScriptEventEventArgs
            (IntPtr namePtr, EntityEventValueType eventType, IntPtr valuePtr)
        {
            this.EventName = Marshal.PtrToStringAnsi(namePtr);
            switch (eventType)
            {
            case EntityEventValueType.Int:
                this.Value = *((int *)valuePtr.ToPointer());
                break;

            case EntityEventValueType.Float:
                this.Value = *((float *)valuePtr.ToPointer());
                break;

            case EntityEventValueType.Bool:
                this.Value = *((bool *)valuePtr.ToPointer());
                break;

            case EntityEventValueType.Vector:
                this.Value = *((Vector3 *)valuePtr.ToPointer());
                break;

            case EntityEventValueType.Entity:
                this.Value = *((EntityId *)valuePtr.ToPointer());
                break;

            case EntityEventValueType.String:
                this.Value = Marshal.PtrToStringAnsi(valuePtr);
                break;

            default:
                throw new ArgumentOutOfRangeException("eventType");
            }
        }
Ejemplo n.º 2
0
        /// <summary>状态修改事件</summary>
        /// <param name="database">数据库</param>
        /// <param name="entity">实体</param>
        /// <param name="oType">操作</param>
        /// <param name="valueType">值类型</param>
        /// <param name="value">内容</param>
        /// <remarks>
        /// 如果内容为实体,使用JSON序列化,
        /// 如果使用主键内容为#:[key](如:#:123)样式,
        /// 如果为批量操作,内容为QueryCondition的JSON序列化
        /// </remarks>
        void IEntityEventProxy.OnStatusChanged(string database, string entity, DataOperatorType oType, EntityEventValueType valueType, string value)
        {
            var arg = JsonConvert.SerializeObject(new EntityEventArgument
            {
                OperatorType = oType,
                ValueType    = valueType,
                Value        = value
            });
            bool re = MessageQueue.Publish("EntityEvent", database, entity, arg);

            LogRecorder.Debug($@"EntityEvent : {database}, {entity},{re}
{arg}");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 状态修改事件
        /// </summary>
        /// <param name="database">数据库</param>
        /// <param name="entity">实体</param>
        /// <param name="oType">操作</param>
        /// <param name="valueType">值类型</param>
        /// <param name="value">内容</param>
        /// <remarks>
        /// 如果内容为实体,使用JSON序列化,
        /// 如果使用主键内容为#:[key](如:#:123)样式,
        /// 如果为批量操作,内容为QueryCondition的JSON序列化
        /// </remarks>
        public static async Task OnStatusChanged(string database, string entity, DataOperatorType oType, EntityEventValueType valueType, string value)
        {
            var services = DependencyHelper.GetServices <IEntityEventProxy>();

            if (services == null)
            {
                return;
            }
            foreach (var service in services)
            {
                await service.OnStatusChanged(database, entity, oType, valueType, value);
            }
        }
 /// <summary>
 /// Creates a new instance of this type.
 /// </summary>
 /// <param name="namePtr">Pointer to ASCIIZ string that is a name of the event.</param>
 /// <param name="eventType">Type of the event.</param>
 /// <param name="valuePtr">Pointer to the value of the event.</param>
 public EntityScriptEventEventArgs(IntPtr namePtr, EntityEventValueType eventType, IntPtr valuePtr)
 {
     this.EventName = Marshal.PtrToStringAnsi(namePtr);
     switch (eventType)
     {
         case EntityEventValueType.Int:
             this.Value = *((int*)valuePtr.ToPointer());
             break;
         case EntityEventValueType.Float:
             this.Value = *((float*)valuePtr.ToPointer());
             break;
         case EntityEventValueType.Bool:
             this.Value = *((bool*)valuePtr.ToPointer());
             break;
         case EntityEventValueType.Vector:
             this.Value = *((Vector3*)valuePtr.ToPointer());
             break;
         case EntityEventValueType.Entity:
             this.Value = *((EntityId*)valuePtr.ToPointer());
             break;
         case EntityEventValueType.String:
             this.Value = Marshal.PtrToStringAnsi(valuePtr);
             break;
         default:
             throw new ArgumentOutOfRangeException("eventType");
     }
 }