public UserBus(IConnection connection, IUserService userService, IBackgroundTaskQueue taskQueue, ILogProvider logProvider) : base(taskQueue, logProvider) { this._userService = userService; this._taskQueue = taskQueue; this._logger = logProvider.CreateLogger <UserBus>(); this._channel = connection.CreateModel(); this._consumerAdd = new AddEvent(this._channel); this._consumerUpdate = new UpdateEvent(this._channel); this._consumerDelete = new DeleteEvent(this._channel); }
public void Remove(IUpdateEvent updateEvent) { if (!IsAdded(updateEvent)) { LogUtil.W("UpdateEvent remove failed, not found!"); return; } _updateEventList.Remove(updateEvent); }
public void Add(IUpdateEvent updateEvent) { if (IsAdded(updateEvent)) { LogUtil.W("UpdateEvent has been added!"); return; } _updateEventList.Add(updateEvent); }
//////////////////////////////////////////////////////////////////////// /// <summary> /// Prints our the various commands with useful debugging info /// </summary> private void HandleEvent(ref IUpdateEvent ue) { interrupted = false; evtText = ue.Text(); evtType = ue.Type(); evtActor = ue.Actor(); //evtText = "["+evtActor + "] " + evtText; ue.RemoveKeys(Meta.TEXT, Meta.TYPE, Meta.ACTOR); switch (evtType) { case "Say": evtText = evtText + " " + ue.Data().Stringify(); break; case "Ask": DoPrompt(ue); SendRandomResponse(ue); break; case "Wait": var now = Util.Millis(); Timers.SetTimeout(3000, () => { if (!interrupted) { Console.WriteLine("\n<resume-event#>" + " after " + Util.Millis(now) + "ms\n"); // send ResumeEvent after 5 sec // (), (#Game), or ({type=a,stage=b,last=true}) gameEvent = new ResumeEvent(); } }); evtText = ("(" + (evtType + " " + ue.Data().Stringify()).Trim() + ")"); break; default: evtText = ("(" + evtType + ": " + (evtText + " " + ue.Data().Stringify()).Trim() + ")"); break; } Console.WriteLine(evtText); ue = null; // dispose event }
public static void ApplyPropertyUpdates(this IUpdateEvent updateEvent, object target) { var targetType = target.GetType(); updateEvent.DirtyProperties.ForEach(prop => { if (Attribute.GetCustomAttribute(prop, typeof(MappingAttribute)) is MappingAttribute mappingAttr) { var property = targetType.GetProperty(mappingAttr.PropertyToName); property.SetValue(target, prop.GetValue(updateEvent)); } }); }
public void Run() { while (true) { IUpdateEvent ue = dialogic.Update(globals, ref gameEvent); if (ue != null) { HandleEvent(ref ue); } Thread.Sleep(30); } }
/// <summary> /// Start the Run loop for the engine /// </summary> public void Run() { TestEvents(Util.Millis()); while (true) { Thread.Sleep(30); IUpdateEvent ue = dialogic.Update(globals, ref gameEvent); if (ue != null) { HandleEvent(ref ue); } } }
private void HandleEvent(ref IUpdateEvent ue) { evtText = ue.Text(); evtType = ue.Type(); evtActor = ue.Actor(); if (evtActor != null) { evtText = evtActor + ": " + evtText; } ue.RemoveKeys(Meta.TEXT, Meta.TYPE, Meta.ACTOR); switch (evtType) { case "Say": evtText = evtText + " " + ue.Data().Stringify(); break; case "Ask": DoPrompt(ue); // respond with 'new ChoiceEvent(choiceIdx);' break; case "Wait": evtText = ("(" + (evtType + " " + ue.Data().Stringify()).Trim() + ")"); break; default: evtText = ("(" + evtType + ": " + (evtText + " " + ue.Data().Stringify()).Trim() + ")"); break; } Display(evtText); if (evtType == "Ask") { // default is to reprompt on timeout int timeout = Util.ToMillis(ue.GetDouble(Meta.TIMEOUT)); while (!DoResponse(timeout)) { Display(evtText); } } ue = null; // dispose event }
private void DoPrompt(IUpdateEvent ue) { evtOpts = ue.Get(Meta.OPTS).Split('\n'); ue.RemoveKeys(Meta.TEXT, Meta.TYPE, Meta.OPTS); // add any meta tags evtText = evtText + " " + ue.Data().Stringify(); // add the options for (int i = 0; i < evtOpts.Length; i++) { evtText += "\n (" + i + ") " + evtOpts[i]; } }
private void SendRandomResponse(IUpdateEvent ue) { double timeout = ue.GetDouble(Meta.TIMEOUT, -1); if (timeout > -1) { var delay = Util.ToMillis(Util.Rand(timeout / 3, timeout)); Timers.SetTimeout(delay, () => { // choice a valid response, or -1 for no response int choice = Util.Rand(evtOpts.Length + 1) - 1; Console.WriteLine("\n<choice-index#" + choice + "> after " + delay + "ms\n"); gameEvent = new ChoiceEvent(choice); }); } }
public async Task NotifyEvent(IUpdateEvent updateEvent) { //var targets = updateEvent.Targets; //var msg = updateEvent.Message; var messages = updateEvent.Messages; var initiatorGuid = updateEvent.Initiator; //For Initiator we dont want to send immediately because its page will be refreshed foreach (var targets in messages.Keys) { var msg = updateEvent.Messages[targets]; if (targets.Contains(initiatorGuid)) { if (!_userGuidToNotificationsQueue.ContainsKey(initiatorGuid)) { _userGuidToNotificationsQueue.Add(initiatorGuid, new ConcurrentQueue <string>()); } _userGuidToNotificationsQueue[initiatorGuid].Enqueue(msg); targets.Remove(initiatorGuid); } foreach (var target in targets) { var targetSessionid = _sessionManager.GetSessionId(target); if (!targetSessionid.Equals(Guid.Empty)) { if (_sessionIdToWebSocket.ContainsKey(targetSessionid)) { var socket = _sessionIdToWebSocket[targetSessionid]; await SendMessage(socket, msg); } } else { if (!_userGuidToNotificationsQueue.ContainsKey(target)) { _userGuidToNotificationsQueue.Add(target, new ConcurrentQueue <string>()); } _userGuidToNotificationsQueue[target].Enqueue(msg); } } } }
internal void RunInLoop() // repeated events { //int ts = 0; //int count = 0; while (true) { Thread.Sleep(30); IUpdateEvent ue = dialogic.Update(globals, ref gameEvent); if (ue != null) { HandleEvent(ref ue); } //if (Util.Millis(ts) > 1000) { // ts = Util.Millis(); // if (++count < 5) { // FuzzySearch.DBUG = count == 4; // gameEvent = new ResumeEvent("{type = test}"); // }} } }
private void HandleEvent(ref IUpdateEvent ue) { evtText = ue.Text(); evtType = ue.Type(); evtActor = ue.Actor(); //evtText = "["+evtActor + "] " + evtText; ue.RemoveKeys(Meta.TEXT, Meta.TYPE, Meta.ACTOR); switch (evtType) { case "Say": evtText = evtText + " " + ue.Data().Stringify(); break; case "Ask": DoPrompt(ue); // respond with 'new ChoiceEvent(choiceIdx);' break; case "Wait": evtText = ("(" + (evtType + " " + ue.Data().Stringify()).Trim() + ")"); break; default: evtText = ("(" + evtType + ": " + (evtText + " " + ue.Data().Stringify()).Trim() + ")"); break; } Console.WriteLine(evtText); ue = null; // dispose event }
internal int Launch(Chat next, bool resetCursor = true) { if (next == null) { throw new DialogicException ("Attempt to launch a null Chat"); } nextEventTime = Util.Millis(); chat = next; chat.Run(resetCursor); // Chats are not ISendable, but its useful for the client to know // when a new Chat is started, so we send the minimal data here chatEvent = new UpdateEvent(new Dictionary <string, object>() { { Meta.TYPE, chat.TypeName() }, { Meta.TEXT, chat.text }, }); Info("\n<#" + chat.text + (resetCursor ? "-started>" : "-resumed>")); return(nextEventTime); }
public static void RaiseEvent(IUpdateEvent updateEvent) { SubscribersHandlers?.Invoke(updateEvent); }
/// <summary> /// Start the Run loop for the engine /// </summary> public void Run() { var now = Util.Millis(); // a 'Load' event if (false) { Timers.SetTimeout(Util.Rand(4000, 6000), () => { Console.WriteLine("\n<load-event#chats>\n"); var runtime = new ChatRuntime(Client.AppConfig.TAC); runtime.ParseText(string.Join('\n', new[] { "CHAT GScriptTest {type=a,stage=b}", "*** Welcome to my updated world!!!" })); gameEvent = new LoadEvent(runtime.Chats()); }); } // a 'Save' event if (false) { Timers.SetTimeout(Util.Rand(4000, 6000), () => { var file = AppDomain.CurrentDomain.BaseDirectory; file += Util.EpochMs() + ".ser"; Console.WriteLine("\n<save-event#file=" + file + ">\n"); gameEvent = new SaveEvent(serializer, new FileInfo(file)); }); } // a 'Tap' event if (false) { Timers.SetTimeout(Util.Rand(2000, 9999), () => { Console.WriteLine("\n<user-event#tap>" + " after " + Util.Millis(now) + "ms\n"); gameEvent = new UserEvent("Tap"); }); } var types = new[] { "critic", "shake", "tap" }; var count = 0; // a 'Resume' event if (false) { Timers.SetInterval(1000, () => { interrupted = true; var data = "{!!type = TYPE,!stage = CORE}"; data = data.Replace("TYPE", types[++count % 3]); Console.WriteLine("\n<resume-event#" + data + ">" + " after " + Util.Millis(now) + "ms\n"); gameEvent = new ResumeEvent(data); }); } while (true) { Thread.Sleep(30); IUpdateEvent ue = dialogic.Update(globals, ref gameEvent); if (ue != null) { HandleEvent(ref ue); } } }
public async Task HandleUpdate(IUpdateEvent updateEvent) { //_logger.Log(LogLevel.Information, string.Join('\n', updateEvent.Messages.Values)); await _notifier.NotifyEvent(updateEvent); }
public bool IsAdded(IUpdateEvent updateEvent) { return(_updateEventList.IndexOf(updateEvent) != -1); }