예제 #1
0
        protected virtual void TriggerEvent(SimpleTask task, EventCallback cb = null)
        {
            TaskScheduleEvent e = new TaskScheduleEvent(task);

            if (!(task.Owner is IEventEmitter owner))
            {
                return;
            }

            IEventBus eventBus = Container.Resolve <IEventBus>();

            if (eventBus == null)
            {
                InternalTasks.Add(task);
                cb?.Invoke(owner, null);
                return;
            }

            eventBus.Emit(owner, e, @event =>
            {
                task.IsCancelled = e.IsCancelled;

                if (!e.IsCancelled)
                {
                    InternalTasks.Add(task);
                }

                cb?.Invoke(owner, @event);
            });
        }
        public virtual void TriggerEvent(UnityTask task, EventCallback cb = null)
        {
            if (task.ExecutionTarget == ExecutionTargetContext.Async || task.ExecutionTarget == ExecutionTargetContext.NextAsyncFrame ||
                task.ExecutionTarget == ExecutionTargetContext.EveryAsyncFrame)
            {
                m_AsyncThreadPool.EventWaitHandle.Set();
            }

            TaskScheduleEvent e = new TaskScheduleEvent(task);

            if (m_EventBus == null)
            {
                m_Tasks.Add(task);
                cb?.Invoke(task.Owner, null);
                return;
            }

            m_EventBus.Emit(task.Owner, e, @event =>
            {
                task.IsCancelled = e.IsCancelled;

                if (!e.IsCancelled)
                {
                    m_Tasks.Add(task);
                }

                cb?.Invoke(task.Owner, @event);
            });
        }
예제 #3
0
        private void OnLoadChannelsComplete(RealmEventArgs args)
        {
            Validation.IsNotNull(args, "args");
            Validation.IsNotNull(args.Data, "args.Data");

            var data = args.Data.ToDictionaryAtom();

            if (!data.GetBool("success"))
            {
                throw new ProcedureFailureException("Load Failure", GetType());
            }

            var commandResults = data.GetAtom <ListAtom>("commandResult");
            var results        = commandResults.GetEnumerator().Current.CastAs <DictionaryAtom>().GetAtom <ListAtom>("Results");

            using (var it = results.GetEnumerator())
            {
                while (it.MoveNext())
                {
                    var result     = it.Current.CastAs <DictionaryAtom>();
                    var channelDef = (ChannelDef)_staticDataManager.GetStaticData(Globals.SystemTypes.Channel, result.GetInt("ChannelPrimitiveID").ToString());
                    var obj        = _entityManager.Create <Channel>(result.GetInt("ChannelID"), result.GetString("Name"), result, channelDef);
                    if (obj == null)
                    {
                        throw new InstantiationException("Failed to instantiate Channel {0}", result.GetInt("ChannelID"));
                    }

                    obj.OnInit(_entityManager.InitializationAtom);
                    _repository.Add(obj.ID, obj);
                }
            }

            _log.DebugFormat("Loaded {0} channels.", _repository.Count);
            _callback?.Invoke(new RealmEventArgs());
        }
예제 #4
0
        private void TriggerEvent(SimpleTask task, EventCallback cb = null)
        {
            TaskScheduleEvent e = new TaskScheduleEvent(task);

            if (!(task.Owner is IEventEmitter owner))
            {
                return;
            }

            if (!task.Owner.IsAlive)
            {
                return;
            }

            IEventManager eventManager = container.Resolve <IEventManager>();

            eventManager?.Emit(owner, e, @event =>
            {
                task.IsCancelled = e.IsCancelled;

                if (!e.IsCancelled)
                {
                    tasks.Add(task);
                }

                cb?.Invoke(owner, @event);
            });
        }
예제 #5
0
        public void LoadGameState(EventCallback <RealmEventArgs> callback)
        {
            _callback = callback;
            _log.Debug("GameStateLoader initialized");

            try
            {
                var gameState = _liveDbContext.GameStates.LastOrDefault();
                if (gameState == null)
                {
                    throw new ProcedureFailureException("Load Failure", GetType());
                }

                var obj = new GameState(new MudTime
                {
                    Year   = gameState.Year,
                    Month  = gameState.MonthId,
                    Day    = gameState.Day,
                    Hour   = gameState.Hour,
                    Minute = gameState.Minute
                });

                _log.DebugFormat("GameStateLoader loaded the new game state: {0}", obj.ToString());

                _callback?.Invoke(new RealmEventArgs(new EventTable {
                    { "GameState", obj }
                }));
            }
            catch (Exception ex)
            {
                ex.Handle(ExceptionHandlingOptions.RecordAndThrow);
            }
        }
예제 #6
0
 /// <summary>
 /// Submits the given callback with the passed data fields
 /// </summary>
 /// <param name="callback"></param>
 /// <param name="success"></param>
 /// <param name="result"></param>
 /// <param name="data"></param>
 private static void IssueCallback(EventCallback <RealmEventArgs> callback, bool success, Atom result, DictionaryAtom data)
 {
     callback?.Invoke(new RealmEventArgs(new EventTable
     {
         { "userData", data },
         { "commandResult", result },
         { "success", success }
     }));
 }
예제 #7
0
 internal void RaiseEvent()
 {
     OnEvent?.Invoke(this, EventArgs.Empty);
     EventCallback?.Invoke();
     if (_period == BlockerPeriod.Once)
     {
         Remove?.Invoke();
     }
 }
예제 #8
0
        /// <summary>
        /// 建立监听
        /// </summary>
        public void Connection()
        {
            if (token == "")
            {
                throw new Exception("请先调用登录方法");
            }
            webSocket            = new WebSocket(address);
            webSocket.OnMessage += (sender, e) =>
            {
                if (e.Data.StartsWith("error"))
                {
                    throw new Exception(e.Data);
                }
                Console.WriteLine("Get Data : " + e.Data);
                var index = e.Data.IndexOf(' ');
                if (index < 0)
                {
                    return;
                }
                var value = JsonConvert.DeserializeObject <Dictionary <string, object> >(JsonConvert.SerializeObject(e.Data.Substring(index + 1)));
                callback?.Invoke(new EventEntity(api)
                {
                    Id       = value.Keys.ToList().Contains("id") ? value["id"]?.ToString() : null,
                    Title    = value.Keys.ToList().Contains("title") ? value["title"]?.ToString() : null,
                    Cover    = value.Keys.ToList().Contains("cover") ? value["cover"]?.ToString() : null,
                    Abstract = value.Keys.ToList().Contains("abstract") ? value["abstract"]?.ToString() : null,
                });
            };

            webSocket.OnOpen += (sender, e) =>
            {
                Console.WriteLine("OnOpen ...");
            };

            webSocket.OnClose += (sender, e) =>
            {
                Console.WriteLine("Close ...");
                if (close)
                {
                    return;
                }
                webSocket.Close();
                Connection();
            };
            webSocket.OnError += (sender, e) =>
            {
                Console.WriteLine("OnError ...");
            };
            webSocket.Connect();
            Console.WriteLine("连接成功 ...");
        }
예제 #9
0
        public void OnListChanged()
        {
            if (Parent != null)
            {
                OnResize();
            }

            if (SelectedIndex >= p_list.Count)
            {
                UnSelect();
            }

            OnListChange?.Invoke(this);
        }
예제 #10
0
        protected virtual void TriggerEvent(ScheduledTask task, EventCallback cb = null)
        {
            if (task.ExecutionTarget == ExecutionTargetContext.Async ||
                task.ExecutionTarget == ExecutionTargetContext.NextAsyncFrame ||
                task.ExecutionTarget == ExecutionTargetContext.EveryAsyncFrame)
            {
                asyncTaskRunner.NotifyTaskScheduled();
            }

            TaskScheduleEvent e = new TaskScheduleEvent(task);

            if (!(task.Owner is IEventEmitter owner))
            {
                return;
            }

            IEventBus eventBus = Container.Resolve <IEventBus>();

            if (eventBus == null)
            {
                InternalTasks.Add(task);
                cb?.Invoke(owner, null);
                return;
            }

            eventBus.Emit(owner, e, async @event =>
            {
                task.IsCancelled = e.IsCancelled;

                if (!e.IsCancelled)
                {
                    InternalTasks.Add(task);
                }

                cb?.Invoke(owner, @event);
            });
        }
예제 #11
0
        public void LoadYear(EventCallback <RealmEventArgs> callback)
        {
            _callback = callback;

            try
            {
                var monthsInOrder = _dbContext.Months.OrderBy(x => x.SortOrder).Select(month => month.Id).ToList();
                _callback?.Invoke(new RealmEventArgs(new EventTable {
                    { "Months", monthsInOrder }
                }));
            }
            catch (Exception ex)
            {
                ex.Handle(ExceptionHandlingOptions.RecordAndThrow);
            }
        }
예제 #12
0
        /// <summary>
        /// Convenience Setup method. It sets the <see cref="IBindable.bindingPath"/> of the tracker, registers a callback and sets an initial value.
        /// </summary>
        /// <param name="propertyPath">Path of the property to be tracked</param>
        /// <param name="callback">Set a callback to be called when the property changes</param>
        /// <param name="initialValue">The initial value of the property. Set it to avoid triggering the callback when the element is bound.</param>
        public void SetUp(string propertyPath, EventCallback <ChangeEvent <TValue> > callback, TValue initialValue = default)
        {
            SetValueWithoutNotify(initialValue);
            bindingPath          = propertyPath;
            valueChangedCallback = callback;

            // There's a issue present at least in Unity 2020.2.7f1, maybe also in older/newer versions, where ChangeEvents are fired on every
            // binding, even if the value hasn't changed. We'll submit a bug report, but on the chance that Unity considers this an expected
            // behavior, here's a fix for us.
            this.RegisterValueChangedCallback(e =>
            {
                if (!EqualityComparer <TValue> .Default.Equals(e.previousValue, e.newValue))
                {
                    valueChangedCallback?.Invoke(e);
                }
            });
        }
예제 #13
0
        /// <summary>
        /// Called every time the list itself changes (items added / removed).
        /// </summary>
        protected void OnListChanged()
        {
            // if already placed in a parent, call the resize event to recalculate scollbar and labels
            if (_parent != null)
            {
                OnResize();
            }

            // make sure selected index is valid
            if (SelectedIndex >= _list.Count)
            {
                Unselect();
            }

            // invoke list change callback
            OnListChange?.Invoke(this);
        }
예제 #14
0
        private static int AddCallback(ComponentSystem sys, Entity uiControl, TypeManager.FieldInfo field, bool watchNegative, EventCallback callback)
        {
            if (!sys.World.EntityManager.Exists(uiControl))
            {
                return(-1);
            }

            var watchers = sys.World.GetExistingSystem <UIControlsWatchersSystem>();

            return(watchers.WatchChanged(uiControl, field, (Entity e, bool oldValue, bool value, Watcher source) =>
            {
                if (value ^ watchNegative)
                {
                    callback?.Invoke(e);
                }

                return true;
            }));
        }
예제 #15
0
        private void OnLoadComplete(RealmEventArgs args)
        {
            Validation.IsNotNull(args, "args");
            Validation.IsNotNull(args.Data, "args.Data");

            var data = args.Data.ToDictionaryAtom();

            if (!data.GetBool("success"))
            {
                _log.ErrorFormat("Failure to load data in {0}", GetType());
                return;
            }

            var commandResult = data.GetAtom <ListAtom>("commandResult").Get(0).CastAs <DictionaryAtom>();

            _callback?.Invoke(
                new RealmEventArgs(new EventTable {
                { "results", commandResult.GetAtom <ListAtom>("Results") }
            }));
        }
예제 #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        private void OnLoadComplete(RealmEventArgs args)
        {
            Validation.IsNotNull(args, "args");
            Validation.IsNotNull(args.Data, "args.Data");

            var data = args.Data.ToDictionaryAtom();

            if (!data.GetBool("success"))
            {
                _log.ErrorFormat("Failure to load data in {0}", GetType());
                return;
            }

            var commandResult = data.GetAtom <ListAtom>("commandResult").Get(0).CastAs <DictionaryAtom>();

            PopulateHashRepository(commandResult.GetAtom <ListAtom>("Results"));

            _log.DebugFormat("{0} hashes loaded.", _repository.Count);
            _callback?.Invoke(new RealmEventArgs());
        }
예제 #17
0
 public void OnPointerEnter(PointerEventData eventData)
 {
     onPointerEnter.Invoke(eventData);
 }
예제 #18
0
 public void OnPointerClick(PointerEventData eventData)
 {
     onPointerClick.Invoke(eventData);
 }
예제 #19
0
 public void OnPointerExit(PointerEventData eventData)
 {
     onPointerExit.Invoke(eventData);
 }
예제 #20
0
파일: EventBus.cs 프로젝트: nuage00/openmod
        public virtual void Subscribe <TEvent>(IOpenModComponent component, EventCallback <TEvent> callback) where TEvent : IEvent
        {
            if (!component.IsComponentAlive)
            {
                return;
            }

            var attribute = GetEventListenerAttribute(callback.Method);

            m_EventSubscriptions.Add(new EventSubscription(component, (serviceProvider, sender, @event) => callback.Invoke(serviceProvider, sender, (TEvent)@event), attribute, typeof(TEvent), component.LifetimeScope.BeginLifetimeScope()));
        }
예제 #21
0
 public void OnPointerUp(PointerEventData eventData)
 {
     onPointerUp.Invoke(eventData);
 }
예제 #22
0
 public void OnDrag(PointerEventData eventData)
 {
     Debug.Log("Drag");
     onDrag.Invoke(eventData);
 }
예제 #23
0
 public void OnEndDrag(PointerEventData eventData)
 {
     onEndDrag.Invoke(eventData);
 }
예제 #24
0
        /// <summary>
        /// Create the DropDown list.
        /// </summary>
        /// <param name="size">List size (refers to the whole size of the list + the header when dropdown list is opened).</param>
        /// <param name="anchor">Position anchor.</param>
        /// <param name="offset">Offset from anchor position.</param>
        /// <param name="skin">Panel skin to use for this DropDown list and header.</param>
        public DropDown(Vector2 size, Anchor anchor = Anchor.Auto, Vector2?offset = null, PanelSkin skin = PanelSkin.ListBackground) :
            base(size, anchor, offset)
        {
            // default padding of self is 0
            Padding = Vector2.Zero;

            // to get collision right when list is opened
            UseActualSizeForCollision = true;

            // create the panel and paragraph used to show currently selected value (what's shown when drop-down is closed)
            _selectedTextPanel     = new Panel(new Vector2(0, SelectedPanelHeight), skin, Anchor.TopLeft);
            _selectedTextParagraph = UserInterface.DefaultParagraph(string.Empty, Anchor.CenterLeft);
            _selectedTextParagraph.UseActualSizeForCollision = false;
            _selectedTextParagraph.UpdateStyle(SelectList.DefaultParagraphStyle);
            _selectedTextParagraph.UpdateStyle(DefaultParagraphStyle);
            _selectedTextParagraph.UpdateStyle(DefaultSelectedParagraphStyle);
            _selectedTextPanel.AddChild(_selectedTextParagraph, true);

            // create the arrow down icon
            _arrowDownImage = new Image(Resources.ArrowDown, new Vector2(ArrowSize, ArrowSize), ImageDrawMode.Stretch, Anchor.CenterRight, new Vector2(-10, 0));
            _selectedTextPanel.AddChild(_arrowDownImage, true);

            // create the list component
            _selectList = new SelectList(size, Anchor.TopCenter, Vector2.Zero, skin);

            // update list offset and space before
            _selectList.SetOffset(new Vector2(0, SelectedPanelHeight));
            _selectList.SpaceBefore = Vector2.Zero;

            // add the header and select list as children
            AddChild(_selectedTextPanel);
            AddChild(_selectList);

            // add callback on list value change
            _selectList.OnValueChange = (Entity entity) =>
            {
                // hide list
                ListVisible = false;

                // set selected text
                _selectedTextParagraph.Text = (SelectedValue ?? DefaultText);
            };

            // hide the list by default
            _selectList.Visible = false;

            // setup the callback to show / hide the list when clicking the dropbox
            _selectedTextPanel.OnClick = (Entity self) =>
            {
                // change visibility
                ListVisible = !ListVisible;
            };

            // set starting text
            _selectedTextParagraph.Text = (SelectedValue ?? DefaultText);

            // update styles
            _selectList.UpdateStyle(DefaultStyle);

            // make the list events trigger the dropdown events
            _selectList.OnListChange       += (Entity entity) => { OnListChange?.Invoke(this); };
            _selectList.OnMouseDown        += (Entity entity) => { OnMouseDown?.Invoke(this); };
            _selectList.OnMouseReleased    += (Entity entity) => { OnMouseReleased?.Invoke(this); };
            _selectList.WhileMouseDown     += (Entity entity) => { WhileMouseDown?.Invoke(this); };
            _selectList.WhileMouseHover    += (Entity entity) => { WhileMouseHover?.Invoke(this); };
            _selectList.OnClick            += (Entity entity) => { OnClick?.Invoke(this); };
            _selectList.OnValueChange      += (Entity entity) => { OnValueChange?.Invoke(this); };
            _selectList.OnMouseEnter       += (Entity entity) => { OnMouseEnter?.Invoke(this); };
            _selectList.OnMouseLeave       += (Entity entity) => { OnMouseLeave?.Invoke(this); };
            _selectList.OnMouseWheelScroll += (Entity entity) => { OnMouseWheelScroll?.Invoke(this); };
            _selectList.OnStartDrag        += (Entity entity) => { OnStartDrag?.Invoke(this); };
            _selectList.OnStopDrag         += (Entity entity) => { OnStopDrag?.Invoke(this); };
            _selectList.WhileDragging      += (Entity entity) => { WhileDragging?.Invoke(this); };
            _selectList.BeforeDraw         += (Entity entity) => { BeforeDraw?.Invoke(this); };
            _selectList.AfterDraw          += (Entity entity) => { AfterDraw?.Invoke(this); };
            _selectList.BeforeUpdate       += (Entity entity) => { BeforeUpdate?.Invoke(this); };
            _selectList.AfterUpdate        += (Entity entity) => { AfterUpdate?.Invoke(this); };

            // make the selected value panel trigger the dropdown events
            _selectedTextPanel.OnMouseDown        += (Entity entity) => { OnMouseDown?.Invoke(this); };
            _selectedTextPanel.OnMouseReleased    += (Entity entity) => { OnMouseReleased?.Invoke(this); };
            _selectedTextPanel.WhileMouseDown     += (Entity entity) => { WhileMouseDown?.Invoke(this); };
            _selectedTextPanel.WhileMouseHover    += (Entity entity) => { WhileMouseHover?.Invoke(this); };
            _selectedTextPanel.OnClick            += (Entity entity) => { OnClick?.Invoke(this); };
            _selectedTextPanel.OnValueChange      += (Entity entity) => { OnValueChange?.Invoke(this); };
            _selectedTextPanel.OnMouseEnter       += (Entity entity) => { OnMouseEnter?.Invoke(this); };
            _selectedTextPanel.OnMouseLeave       += (Entity entity) => { OnMouseLeave?.Invoke(this); };
            _selectedTextPanel.OnMouseWheelScroll += (Entity entity) => { OnMouseWheelScroll?.Invoke(this); };
            _selectedTextPanel.OnStartDrag        += (Entity entity) => { OnStartDrag?.Invoke(this); };
            _selectedTextPanel.OnStopDrag         += (Entity entity) => { OnStopDrag?.Invoke(this); };
            _selectedTextPanel.WhileDragging      += (Entity entity) => { WhileDragging?.Invoke(this); };
            _selectedTextPanel.BeforeDraw         += (Entity entity) => { BeforeDraw?.Invoke(this); };
            _selectedTextPanel.AfterDraw          += (Entity entity) => { AfterDraw?.Invoke(this); };
            _selectedTextPanel.BeforeUpdate       += (Entity entity) => { BeforeUpdate?.Invoke(this); };
            _selectedTextPanel.AfterUpdate        += (Entity entity) => { AfterUpdate?.Invoke(this); };
        }
예제 #25
0
 public void OnPointerDown(PointerEventData eventData)
 {
     Debug.Log("Pointer Down");
     onPointerDown.Invoke(eventData);
 }