예제 #1
0
        public WebClient()
        {
            var querystringData = new Dictionary <string, string> {
                { "id", "10001" }
            };

            _conn = new HubConnection(SignalRurl, querystringData);
            // v1的測試hub
            _chatHub = _conn.CreateHubProxy("chatHub");
            _chatHub.On <string>("addMessage", (msg) =>
            {
                OnRecived?.Invoke(msg);
            });

            // v2的測試Hub:應從DB中取得該人員參與的頻道,再加入Hub
            var t = new List <ChannelInfo>();

            _hubs = GetUserHubs(t);

            foreach (var currectHub in _hubs)
            {
                currectHub.Value.On <string>("received", (msg) =>
                {
                    OnRecived?.Invoke(msg);
                });
            }
        }
 private void RaiseRecivedEvent(Memory <byte> buffer)
 {
     OnRecived?.Invoke(this, new RecivedEventArgs(buffer));
 }
 private void Callback_OnCharacteristicAlreadyChanged(object sender, CharacteristicAlreadyChangedEventArgs characteristicAlreadyChangedEventArgs)
 {
     OnRecived?.Invoke(this, new RecivedEventArgs(new Memory <byte>(characteristicAlreadyChangedEventArgs.Value)));
 }
예제 #4
0
        private static void MessageHandler(RecivedMessage message)
        {
            if (message == null)
            {
                return;
            }

            using (var context = new UserContext(message.UserId, message.ChatId))
            {
                User.User user = context;
                OnRecived?.Invoke(user, message);

                try
                {
                    user.MessageManager.RecievedMessage = message;
                    message.Action?.Invoke(message, user);

                    switch (message.Text.Split('@')[0].Split(' ')[0])
                    {
                    case "/start":
                    {
                        user.RoomManager.Go("_root", false);
                        break;
                    }

                    case "/lag":
                    {
                        user.MessageManager.SendImmediately(new SentMessage
                            {
                                Text =
                                    @"Если бот долго отвечает, то создайте беседу и обязательно пригласите туда @AdventureTownBot.
После этого пригласите туда @PocketTownBot и @MonsterTownBot",
                                Intent = "command-lag"
                            });
                        break;
                    }

                    case "/repeat":
                    {
                        user.MessageManager.SendImmediately(user.MessageManager.LastMessages.Last());
                        break;
                    }

                    case "/token":
                    {
                        user.MessageManager.SendImmediately(new SentMessage
                            {
                                Text   = $@"Ваш токен: `{user.Token}`.
Используйте его чтобы связать другой аккаунт с этим персонажем (`/link {user.Info.UserId.Messenger} {user.Info.UserId.Id} {user.Token}`).
Чтобы сгенерировать новый токен используйте `/revoke`",
                                Intent = "command-token"
                            });
                        break;
                    }

                    case "/revoke":
                    {
                        user.Token = Guid.NewGuid();
                        user.MessageManager.SendImmediately(new SentMessage
                            {
                                Text   = $"Ваш новый токен: <code>{user.Token}</code>.",
                                Intent = "command-revoke"
                            });
                        break;
                    }

                    case "/link":
                    {
                        var splitted = message.Text.Split(' ');
                        if (splitted.Length != 4 ||
                            !int.TryParse(splitted[1], out var messenger) ||
                            !long.TryParse(splitted[2], out var id) ||
                            !Guid.TryParse(splitted[3], out var token))
                        {
                            user.MessageManager.SendImmediately(new SentMessage
                                {
                                    Text =
                                        @"Чтобы связвть этот аккаунт с другим игровым персонажем используйте <code>/link <messenger_id> <user_id> <token></code>",
                                    Intent = "command-link-error"
                                });
                            break;
                        }

                        var uid = new UserId(messenger, id);

                        if (uid.Equals(user.Info.UserId))
                        {
                            user.MessageManager.SendImmediately(new SentMessage
                                {
                                    Text   = @"К сожалению, нельзя связаться с самим собой",
                                    Intent = "command-link-self"
                                });
                            break;
                        }

                        using (var linkTo = new UserContext(uid))
                        {
                            if (linkTo.User.Token != token)
                            {
                                user.MessageManager.SendImmediately(new SentMessage
                                    {
                                        Text   = @"Не удалось связать аккаунты. Проверьте, всё ли правильно вы ввели",
                                        Intent = "command-link-forbidden"
                                    });
                                break;
                            }
                        }

                        user.LinkedTo = new Tuple <UserId, Guid>(uid, token);
                        user.MessageManager.SendImmediately(new SentMessage
                            {
                                Text   = @"Отлично! Чтобы отвязать аккаунт используйте <code>/unlink</code>",
                                Intent = "command-link"
                            });
                        break;
                    }

                    case "/unlink":
                    {
                        if (context.Unlink())
                        {
                            user.MessageManager.SendImmediately(new SentMessage
                                {
                                    Text   = @"Готово!",
                                    Intent = "command-unlink"
                                });
                        }
                        else
                        {
                            user.MessageManager.SendImmediately(new SentMessage
                                {
                                    Text   = "Вы и так ни к кому не привязаны",
                                    Intent = "command-unlink-fail"
                                });
                        }

                        break;
                    }

                    default:
                    {
                        user.MessageManager.OnRecieved(message);
                        break;
                    }
                    }

                    user.MessageManager.Finish();
                }
                catch (Exception e)
                {
                    Logger.Error(e, "Error for user {UserId}@{ChatId}", message.UserId, message.ChatId);
                    var error = MessageManager.Escape(e.ToString());
                    user.MessageManager.SendImmediately(new SentMessage
                    {
                        Text   = $"Вы пошатнули мироздание и произошла ошибка:\n<pre>{error}</pre>",
                        Intent = "error"
                    });
                }
            }
        }