/// <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"); } }
/// <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}"); }
/// <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"); } }