Example #1
0
        protected void InternalOnMessage(UserInfo user, string message)
        {
            if (IsDisposed)
            {
                return;
            }
            Logger.Trace("Message '{0}' -> Heyman:{1}", user, message);
            lock (_sync)
            {
                HeymanTalk talk;
                // try find talk with this user
                if (_talks.TryGetValue(user.Id, out talk))
                {
                    //already talks with this user -> send message ot talk
                    talk.OnMessage(message);
                }
                else
                {
                    // new talk -> try find command by message
                    var cmd = FindCommand(message);
                    if (cmd == null)
                    {
                        Logger.Warn("'{0}' -> Heyman: Unkwnon command '{1}'", user, message);
                        PrintHelp(user.Id, message, _commands);
                        return;
                    }

                    talk = new HeymanTalk(user, this);

                    _talks.Add(user.Id, talk);

                    try
                    {
                        Logger.Info("Begin talk '{0}' with user {1}", cmd.Title, user);
                        //run on current thread
                        talk.Run(cmd, message);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "Error to begin talk {0} with", cmd.Title, user);
                        Say(talk.User.Id, ex.Message);
                    }

                    //wait for exit on new thread
                    Task.Factory.StartNew(() => RemoveOnExit(talk), TaskCreationOptions.LongRunning);
                }
            }
        }
Example #2
0
        private void RemoveOnExit(HeymanTalk talk)
        {
            try
            {
                talk.WaitExit();
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Error to wait for exit talk with user {0}", talk.User);
                Say(talk.User.Id, ex.Message);
            }

            lock (_sync)
            {
                Logger.Info("COMPLETE {0}", talk);
                _talks.Remove(talk.User.Id);
            }
        }
Example #3
0
        protected void InternalOnMessage(UserInfo user, string message)
        {
            if (IsDisposed) return;
            Logger.Trace("Message '{0}' -> Heyman:{1}",user,message);
            lock (_sync)
            {
                HeymanTalk talk;
                // try find talk with this user
                if (_talks.TryGetValue(user.Id, out talk))
                {
                    //already talks with this user -> send message ot talk
                    talk.OnMessage(message);
                }
                else
                {
                    // new talk -> try find command by message
                    var cmd = FindCommand(message);
                    if (cmd == null)
                    {
                        Logger.Warn("'{0}' -> Heyman: Unkwnon command '{1}'", user, message);
                        PrintHelp(user.Id, message,_commands);
                        return;
                    }

                    talk = new HeymanTalk(user, this);

                    _talks.Add(user.Id, talk);

                    try
                    {
                        Logger.Info("Begin talk '{0}' with user {1}", cmd.Title, user);
                        //run on current thread
                        talk.Run(cmd,message);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "Error to begin talk {0} with", cmd.Title, user);
                        Say(talk.User.Id, ex.Message);
                    }

                    //wait for exit on new thread
                    Task.Factory.StartNew(()=>RemoveOnExit(talk), TaskCreationOptions.LongRunning);
                }
            }
        }
Example #4
0
        private void RemoveOnExit(HeymanTalk talk)
        {
            try
            {
                talk.WaitExit();
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Error to wait for exit talk with user {0}", talk.User);
                Say(talk.User.Id,ex.Message);
            }

            lock (_sync)
            {
                Logger.Info("COMPLETE {0}", talk);
                _talks.Remove(talk.User.Id);
            }
        }