/*public static void RemoveEventHandler<TDbContext, TEntity>( EventHandler<EntityEventArgs<TDbContext, TEntity>> eventHandler, EntityEvent entityEvent) where TDbContext : DbContext, new() where TEntity : class, new() { Type genericType = typeof(EntityRepository<TDbContext, TEntity>); var genericEvent = GetEvent(genericType, entityEvent); genericEvent.GetRemoveMethod(true).Invoke(null, new object[] { eventHandler }); }*/ /// <summary> /// Removes an Event Handler to an entity event /// </summary> /// <param name="eventHandler">The method to call</param> /// <param name="entityEvent">On which event</param> /// <param name="entityType">For which entity type</param> public static void RemoveEventHandler(EventHandler<IEntityEventArgs> eventHandler, EntityEvent entityEvent, Type entityType) { IContextHandler handler = RepositoryFactory.GetRepository(entityType) as IContextHandler; if (handler == null) { throw new InvalidOperationException("Could not find repository to register to."); } Type genericType = typeof(EntityRepository<,>).MakeGenericType(handler.ContextType, entityType); var genericEvent = GetEvent(genericType, entityEvent); genericEvent.GetRemoveMethod(true).Invoke(null, new object[] { eventHandler }); }
//------------------------------------------------------------------------- public abstract void handleEvent(object sender, EntityEvent e);
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { }
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { if (e is EvCellBagAddItem) { // CellBag,添加道具消息 var ev = (EvCellBagAddItem)e; // 主动查询一次背包中是否有所需任务物品 foreach (var i in TbDataTaskCollectItem.ListCollectItem) { int num_cur = CoPlayer.CoBag.getItemNumByItemId(i.item_id); if (num_cur > i.count) num_cur = i.count; foreach (var j in ListItemData) { if (j.item_id == i.item_id) { if (j.num_cur != num_cur) { j.num_cur = num_cur; _saveTaskData(); TaskMgr._serverAddDirtyTask(this); } break; } } } if (TaskData.task_state == TaskState.Doing && _isDone()) { TaskData.task_state = TaskState.Done; TaskMgr._serverAddDirtyTask(this); } if (TaskData.task_state == TaskState.Done && TbDataTask.FinishNpcId == 0) { TaskData.task_state = TaskState.Release; TaskMgr._serverAddDirtyTask(this); } } }
private unsafe void ProcessEntityEventInternal(EntityEvent @event, IntPtr parameter0, IntPtr parameter1, IntPtr parameter2, IntPtr parameter3, float singleParameter0, float singleParameter1) { switch (@event) { case EntityEvent.XForm: this.OnMoved((EntityXFormFlags)parameter0.ToInt32()); break; case EntityEvent.XformFinishedEditor: break; case EntityEvent.Timer: this.OnTimedOut(parameter0, parameter1.ToInt32()); break; case EntityEvent.Initialize: break; case EntityEvent.Done: this.DisposeInternal(); break; case EntityEvent.ReturningToPool: break; case EntityEvent.Visiblity: if (parameter0.ToInt32() == 0) { this.OnDisappeared(); } else { this.OnAppeared(); } this.OnVisibilityStateChanged(parameter0.ToInt32() != 0); break; case EntityEvent.Reset: this.OnResetByEditor(parameter0.ToInt32() != 0); break; case EntityEvent.Attach: this.OnAttached(new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt)); break; case EntityEvent.AttachThis: this.OnAttachedTo(new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt)); break; case EntityEvent.Detach: this.OnDetached(new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt)); break; case EntityEvent.DetachThis: this.OnDetachedFrom(new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt)); break; case EntityEvent.Link: this.OnLinked(parameter0); break; case EntityEvent.Delink: this.OnUnlinked(parameter0); break; case EntityEvent.Hide: this.OnHidden(true); break; case EntityEvent.Unhide: this.OnHidden(false); break; case EntityEvent.EnablePhysics: break; case EntityEvent.PhysicsChangeState: break; case EntityEvent.ScriptEvent: this.OnScriptEventBroadcasted ( new EntityScriptEventEventArgs ( parameter0, (EntityEventValueType)parameter1.ToInt32(), parameter2 ) ); break; case EntityEvent.EnterArea: this.OnEnteredArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt) ) ); break; case EntityEvent.LeaveArea: this.OnLeftArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt) ) ); break; case EntityEvent.EnterNearArea: this.OnEnteredProximityArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt) ) ); break; case EntityEvent.LeaveNearArea: this.OnLeftProximityArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt) ) ); break; case EntityEvent.MoveInsideArea: this.OnMovedInsideArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt) ) ); break; case EntityEvent.MoveNearArea: this.OnMovedNearArea ( new EntityAreaPositionEventArgs ( new EntityId(new Bytes4(parameter0.ToInt32()).UnsignedInt), parameter1.ToInt32(), new EntityId(new Bytes4(parameter2.ToInt32()).UnsignedInt), singleParameter0 ) ); break; case EntityEvent.CrossArea: break; case EntityEvent.PhysicsPostStep: break; case EntityEvent.PhysicsBreak: break; case EntityEvent.AiDone: break; case EntityEvent.SoundDone: break; case EntityEvent.NotSeenTimeout: this.OnUnseenTimeOut(); break; case EntityEvent.Collision: this.OnCollided(*((CryCollision*)parameter0.ToPointer())); break; case EntityEvent.Render: // Get rendering parameters and create a reference object that will // allow handlers modify the structure. RenderParams* renderingParameters = (RenderParams*)parameter0.ToPointer(); RenderParams? renderParamsReference = *renderingParameters; this.OnRendered ( new EventArgs<RenderParams?> ( renderParamsReference ) ); // Pass modifications to native code, if allowed. if (Platform.AllowRenderParametersModification) { *renderingParameters = renderParamsReference.Value; } break; case EntityEvent.PrePhysicsUpdate: this.OnBeforePhysicsUpdate(singleParameter0); break; case EntityEvent.LevelLoaded: this.OnLevelLoaded(); break; case EntityEvent.StartLevel: this.OnLevelStarted(); break; case EntityEvent.StartGame: this.OnGameStarted(); break; case EntityEvent.EnterScriptState: break; case EntityEvent.LeaveScriptState: break; case EntityEvent.PreSerialize: break; case EntityEvent.PostSerialize: break; case EntityEvent.Invisible: this.OnDisappeared(); this.OnVisibilityStateChanged(false); break; case EntityEvent.Visible: this.OnAppeared(); this.OnVisibilityStateChanged(true); break; case EntityEvent.Material: this.OnMaterialChanged(parameter0); break; case EntityEvent.MaterialLayer: break; case EntityEvent.OnHit: break; case EntityEvent.AnimationEvent: break; case EntityEvent.ScriptRequestColliderMode: break; case EntityEvent.ActiveFlowNodeOutput: break; case EntityEvent.EditorPropertyChanged: break; case EntityEvent.ReloadScript: break; case EntityEvent.Activated: this.OnActivated(); this.OnActivationStateChanged(true); break; case EntityEvent.Deactivated: this.OnDeactivated(); this.OnActivationStateChanged(false); break; case EntityEvent.Last: break; default: return; } }
protected void When(EntityEvent e) { }
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { if (e is EvUiLoginClickBtnLogin) { // 请求登录 var ev = (EvUiLoginClickBtnLogin)e; if (CoApp.CoUCenter.WWWLogin != null) { //FloatMsgInfo f_info; //f_info.msg = "正在登陆中,请稍候"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } else { _requestLogin(ev.acc, ev.pwd); } } else if (e is EvUiLoginRegisterAccount) { // 请求注册帐号 var ev = (EvUiLoginRegisterAccount)e; AccountRegisterInfo request = ev.register_acc_data; if (request.Email == null) { request.Email = ""; } if (request.IdentityNum == null) { request.IdentityNum = ""; } if (request.PhoneNum == null) { request.PhoneNum = ""; } if (request.Name == null) { request.Name = ""; } if (request.Password == request.SuperPassword) { //UiHelper.DestroyWaiting(); //FloatMsgInfo f_info; //f_info.msg = "注册失败,密码和超级密码不能相同"; //f_info.color = Color.red; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } else if (CoApp.CoUCenter.WWWRegister != null) { //FloatMsgInfo f_info; //f_info.msg = "正在注册中,请稍候"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } if (mGuestPlayerInfo == null) { //UiHelper.CreateWaiting(); mPassword = request.Password; CoApp.CoUCenter.register(request, _onUCenterRegister); //todo: 销毁注册界面 UiMgr.Instance.destroyCurrentUi<UiMbCreateAccount>(); } else { AccountConvertInfo guest_convertregisterdata = new AccountConvertInfo(); if (guest_convertregisterdata.IdentityNum == null) { guest_convertregisterdata.IdentityNum = ""; } if (guest_convertregisterdata.PhoneNum == null) { guest_convertregisterdata.PhoneNum = ""; } if (guest_convertregisterdata.Name == null) { guest_convertregisterdata.Name = ""; } guest_convertregisterdata.AccountId = mGuestPlayerInfo.account_id; guest_convertregisterdata.AccountName = request.AccountName; guest_convertregisterdata.Email = request.Email; guest_convertregisterdata.Password = request.Password; guest_convertregisterdata.OldPassword = mGuestPlayerInfo.pwd; guest_convertregisterdata.SuperPassword = request.SuperPassword; guest_convertregisterdata.Sex = request.Sex; //UiHelper.CreateWaiting(); mPassword = request.Password; CoApp.CoUCenter.convert(guest_convertregisterdata, _onUCenterConvert); //todo: 销毁注册界面 UiMgr.Instance.destroyCurrentUi<UiMbCreateAccount>(); } //UiHelper.DestroyWaiting(); } else if (e is EvUiLoginClickBtnFacebook) { // 请求Facebook登录 var ev = (EvUiLoginClickBtnFacebook)e; } else if (e is EvUiLoginClickBtnVisiter) { // 请求游客登录 var ev = (EvUiLoginClickBtnVisiter)e; if (mGuestPlayerInfo == null) { //UiHelper.CreateWaiting(); CoApp.CoUCenter.guest(_uCenterGuestCallBack); } else { _requestLogin(mGuestPlayerInfo.account_name, mGuestPlayerInfo.pwd); } } else if (e is EvUiRequestGetPwd) { // 请求获取忘记密码 var ev = (EvUiRequestGetPwd)e; string super_pwd = ev.super_pwd; } else if (e is EvUiLoginDeleteGuest) { //清除游客 _clearGuest(); } }
/// <summary> /// When implemented in derived class, processes an event that is not processed /// anywhere else. /// </summary> /// <remarks> /// Documentation for <see cref="EntityEvent"/> contains details about each event /// along with descriptions of each parameter. /// </remarks> /// <param name="event"> Event to process.</param> /// <param name="parameter0"> Optional first integer parameter.</param> /// <param name="parameter1"> Optional second integer parameter.</param> /// <param name="parameter2"> Optional third integer parameter.</param> /// <param name="parameter3"> Optional fourth integer parameter.</param> /// <param name="singleParameter0"> /// Optional first floating point parameter. /// </param> /// <param name="singleParameter1"> /// Optional second floating point parameter. /// </param> /// <seealso cref="EntityEvent"/> public abstract void ProcessEvent(EntityEvent @event, IntPtr parameter0, IntPtr parameter1, IntPtr parameter2, IntPtr parameter3, float singleParameter0, float singleParameter1);
private void Raise <TEntity>(EntityEvent <TEntity> created) { Eventer.Raise(created); }
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { if (e is EvUiClickShop) { var ev = (EvUiClickShop)e; // 点击主界面商城 } else if (e is EvUiClickFriend) { var ev = (EvUiClickFriend)e; // 点击主界面好友 } else if (e is EvUiClickMsg) { var ev = (EvUiClickMsg)e; // 点击主界面消息 } else if (e is EvUiClickHelp) { var ev = (EvUiClickHelp)e; // 点击主界面帮助 } else if (e is EvUiClickEdit) { var ev = (EvUiClickEdit)e; // 点击主界面编辑 } else if (e is EvUiClickLogin) { var ev = (EvUiClickLogin)e; EbLog.Note("ClientPlayer.handleEvent() 响应点击登陆按钮消息"); // 点击主界面登陆 CoApp.CoNetMonitor.disconnect(); } else if (e is EvUiClickPlayNow) { var ev = (EvUiClickPlayNow)e; // 点击主界面立即玩 //requestPlayNow(); } //else if (e is EvUiClickCreateDeskTop) //{ // var ev = (EvUiClickCreateDeskTop)e; // // 请求创建私人牌桌 // int seat_num = ev.seat_num; // PrivateDesktopCreateInfo desktop_createinfo; // desktop_createinfo.seat_num = seat_num; // desktop_createinfo.desktop_tableid = ev.desk_topinfo_id; // desktop_createinfo.is_vip = CoActor.Def.mPropIsVIP.get(); // requestCreatePrivateDesktop(desktop_createinfo); //} else if (e is EvUiClickExitDesk) { // 点击离开桌子 requestLeaveDesktop(); } //else if (e is EvUiClickEnterDesktop) //{ // requestEnterDesktopAny(); //} //else if (e is EvUiClickGetSelfPlayerInfo) //{ // var ev = (EvUiClickGetSelfPlayerInfo)e; // // 点击主界面玩家信息 //} //else if (e is EvUiClickGetPlayerProfile) //{ // var ev = (EvUiClickGetPlayerProfile)e; // requestGetPlayerInfoOther(ev.player_etguid); // //requestGetPlayerInfo(ev.player_etguid, _eRequestPlayerInfoReason.PlayerProfile); //} else if (e is EvUiClickChangePlayerNickName) { // 改昵称 var ev = (EvUiClickChangePlayerNickName)e; requestChangeNickName(ev.new_name); } else if (e is EvUiClickChangePlayerIndividualSignature) { // 改签名 var ev = (EvUiClickChangePlayerIndividualSignature)e; requestChangeIndividualSignature(ev.new_individual_signature); } else if (e is EvUiClickChangePlayerProfileSkin) { // 换肤 var ev = (EvUiClickChangePlayerProfileSkin)e; requestChangePlayerProfileSkin(ev.skin_id); } else if (e is EvUiClickRefreshIPAddress) { // 刷新IP所在地 requestRefreshIpAddress(); } else if (e is EvUiReportFriend) { // 举报好友 var ev = (EvUiReportFriend)e; string et_guid = ev.friend_etguid; ReportPlayerType report_type = ev.report_type; requestReprotPlayer(et_guid, report_type); } else if (e is EvUiInviteFriendPlayTogether) { // 邀请好友一起玩 var ev = (EvUiInviteFriendPlayTogether)e; DesktopConfigData desktop_configdata = CoPlayerDesktop.DesktopConfigData; if (desktop_configdata != null && !string.IsNullOrEmpty(desktop_configdata.desktop_etguid)) { requestInvitePlayerEnterDesktop(ev.friend_guid, desktop_configdata.desktop_etguid, 0, 0, CoPlayerDesktop.getPlayerCount(), desktop_configdata.seat_num); } } else if (e is EvUiClickChipTransaction) { // 点击送筹码 var ev = (EvUiClickChipTransaction)e; if (CoActor.Def.PropGold.get() < 100000) { //FloatMsgInfo f_info; //f_info.msg = "筹码不足10万,不能发送!"; //f_info.color = Color.red; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } else { //UiMbChipTransaction chip_transaction = UiMgr.Instance.createUi<UiMbChipTransaction>(_eUiLayer.MessgeBox); //chip_transaction.setChipTransactionInfo(CoActor.Def.mPropChip.get(), CoActor.Def.mPropChip.get(), // 100000, CoPlayerFriend.getFriendItem(ev.send_target_etguid)); } } else if (e is EvUiCreateMainUi) { createMainUi(); } else if (e is EvUiCreateExchangeChip) { // 创建换钱UI //UiMbExchangeChip chip_transaction = UiMgr.Instance.createUi<UiMbExchangeChip>(_eUiLayer.MessgeBox); //chip_transaction.setExchangeInfo(CoActor.Def.PropGold.get(), CoActor.Def.PropGold.get(), 100); } else if (e is EvUiRequestGetRankPlayerInfo) { // 请求排行榜玩家信息 var ev = (EvUiRequestGetRankPlayerInfo)e; requestGetPlayerInfoOther(ev.player_etguid); } else if (e is EvUiRequestPlayerInfoOther) { // 请求其他玩家详细信息 var ev = (EvUiRequestPlayerInfoOther)e; requestGetPlayerInfoOther(ev.player_etguid); } }
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { if (e is EvCellActorPropDirty) { // CellActor,角色属性集变脏 var ev = (EvCellActorPropDirty)e; // 通知客户端Actor应用脏属性 if (!CoActor.Def.mPropIsBot.get()) { PlayerNotify player_notify; player_notify.id = PlayerNotifyId.ActorMapPropDirty; player_notify.data = EbTool.protobufSerialize <Dictionary <string, string> >(ev.map_prop_dirty); MethodData notify_data = new MethodData(); notify_data.method_id = MethodType.s2cPlayerNotify; notify_data.param1 = EbTool.protobufSerialize <PlayerNotify>(player_notify); var grain = Entity.getUserData <GrainCellPlayer>(); var grain_player = grain.GF.GetGrain <ICellPlayer>(new Guid(Entity.Guid)); grain_player.s2sNotify(notify_data); } } else if (e is EvCellActorLevelup) { // CellActor消息,角色升级 var ev = (EvCellActorLevelup)e; // 通知客户端Actor应用脏属性 if (!CoActor.Def.mPropIsBot.get()) { PlayerNotify player_notify; player_notify.id = PlayerNotifyId.Levelup; player_notify.data = EbTool.protobufSerialize <int>(ev.level_new); MethodData notify_data = new MethodData(); notify_data.method_id = MethodType.s2cPlayerNotify; notify_data.param1 = EbTool.protobufSerialize <PlayerNotify>(player_notify); var grain = Entity.getUserData <GrainCellPlayer>(); var grain_player = grain.GF.GetGrain <ICellPlayer>(new Guid(Entity.Guid)); grain_player.s2sNotify(notify_data); } } else if (e is EvCellBagAddItem) { // CellBag,添加道具消息 var ev = (EvCellBagAddItem)e; // 通知客户端添加道具 if (!CoActor.Def.mPropIsBot.get()) { CoBag.s2cBagNotifyAddItem(ev.item.ItemData); } } else if (e is EvCellBagDeleteItem) { // CellBag,删除道具消息 var ev = (EvCellBagDeleteItem)e; // 通知客户端删除道具 if (!CoActor.Def.mPropIsBot.get()) { CoBag.s2cBagNotifyDeleteItem(ev.item_objid); } } else if (e is EvCellBagUpdateItem) { // CellBag,更新道具消息 var ev = (EvCellBagUpdateItem)e; // 通知客户端更新道具 if (!CoActor.Def.mPropIsBot.get()) { CoBag.s2cBagNotifyUpdateItem(ev.item.ItemData); } } else if (e is EvCellEquipTakeonEquip) { // CellEquip,穿装备消息 var ev = (EvCellEquipTakeonEquip)e; // 通知客户端穿上装备 if (!CoActor.Def.mPropIsBot.get()) { CoEquip.s2cEquipNotifyTakeon(ev.item.ItemData); } } else if (e is EvCellEquipTakeoffEquip) { // CellEquip,脱装备消息 var ev = (EvCellEquipTakeoffEquip)e; // 通知客户端脱下装备 if (!CoActor.Def.mPropIsBot.get()) { CoEquip.s2cEquipNotifyTakeoff(ev.equip_slot); } } else if (e is EvCellStatusCreateStatus) { // CellStatus,创建状态消息 var ev = (EvCellStatusCreateStatus)e; // 通知客户端创建Status if (!CoActor.Def.mPropIsBot.get()) { CoStatus.s2cStatusNotifyCreateStatus(ev.item.ItemData); } } }
public static async Task CallbackEntity(INode node, Nuid id, string entity_type, EntityEvent entity_event, NList args) { await _EntityEvents.Callback(new Tuple <string, EntityEvent>(entity_type, entity_event), node, id, args); }
protected void RCEntity(string entity_type, EntityEvent entity_event, EventCallback handler, int priority = 1) { _EntityEvents.Register(new Tuple <string, EntityEvent>(entity_type, entity_event), handler, priority); }
//------------------------------------------------------------------------- public void handleEvent(object sender, EntityEvent e) { foreach (var i in MapTask) { i.Value.handleEvent(sender, e); } }
public void HandleSubscriptionNotifications(EntityEvent entity) { // todo }
private static EventInfo GetEvent(Type genericType, EntityEvent entityEvent) { string eventName = entityEvent.ToString() + EventSuffix; return genericType.GetEvent(eventName, BindingFlags.NonPublic | BindingFlags.Static); }
public void AddEvent( EntityEvent newEvent ) { try { if ( ResourceLocked ) { //Only add priority 0 and 1 events to the buffer while the list is locked if ( newEvent.priority < 2 ) m_entityEventsBuffer.Add( newEvent ); } else { m_entityEvents.Add( newEvent ); } } catch ( Exception ex ) { ApplicationLog.BaseLog.Error( ex ); } }
public void AddEvent(EntityEvent newEvent) { try { if (ResourceLocked) { //Only add priority 0 and 1 events to the buffer while the list is locked if (newEvent.priority < 2) m_entityEventsBuffer.Add(newEvent); } else { m_entityEvents.Add(newEvent); } } catch (Exception ex) { if(SandboxGameAssemblyWrapper.IsDebugging) LogManager.ErrorLog.WriteLine(ex); } }
//see https://stackoverflow.com/questions/21402465/iequalitycomparer-not-working-as-intended public override int GetHashCode() { return(HashCode.Combine(CallingEntity, EntityEvent.GetType(), HasRemoveDuplicateAttribute)); }