public void TestClose()
        {
            var testResults = new TestResults(3, false);
            var mailbox     = new TestMailbox(testResults, World.DefaultLogger);
            var actor       = new CountTakerActor(testResults, World.DefaultLogger);

            for (var count = 0; count < 3; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
                dispatcher.Execute(mailbox);
            }

            dispatcher.Close();

            Action <ICountTaker> consumer2 = consumerActor => consumerActor.Take(10);
            var message2 = new LocalMessage <ICountTaker>(actor, consumer2, "Take(int)");

            mailbox.Send(message2);
            dispatcher.Execute(mailbox);

            var counts = testResults.GetCounts();

            Assert.Equal(3, counts.Count);
            for (var idx = 0; idx < counts.Count; ++idx)
            {
                Assert.Contains(idx, counts);
            }
        }
Example #2
0
        private async Task SendReminderAsync(Reminder reminder)
        {
            var channel = Bot.GetChannel(reminder.GuildId, reminder.ChannelId);

            var localMessage = new LocalMessage()
                               .WithContent(Mention.User(reminder.UserId))
                               .AddEmbed(reminder.CreateEmbed());

            // Channel where reminder was created no longer exists and hence the reminder no longer exists
            if (channel is not null)
            {
                await Bot.SendMessageAsync(reminder.ChannelId, localMessage);
            }
            else
            {
                try
                {
                    localMessage.Embeds.First().WithFooter("Your are receiving a DM because the channel this reminder was scheduled in no longer exists");
                    var dmChannel = await Bot.CreateDirectChannelAsync(reminder.UserId);

                    await dmChannel.SendMessageAsync(localMessage);
                }
                catch (RestApiException e) when(e.ErrorModel.Code.GetValueOrDefault() == RestApiErrorCode.CannotSendMessagesToThisUser)
                {
                    Logger.LogInformation("Could not notify user {0} about a reminder.  Deleting reminder without notifying user.", reminder.UserId);
                }
            }

            await RemoveReminderAsync(reminder);
        }
Example #3
0
    private Dictionary <GameObject, ulong> ObjectContainer = new Dictionary <GameObject, ulong>(); //玩家物体——玩家编号

    void OnEnable()
    {
        LocalMessage.SetHandler(MessageHandler);
        InputField[] tempIF = { PlayerGoldInputField, TowerAttackInputField, TowerSpeedInputField, TowerBuildCostInputField, MonsterDefenseInputField, MonsterHipPointInputField, MonsterSpeedInputField };
        Dropdown[]   tempD  = { PlayerGoldDropdown, TowerAttackDropdown, TowerSpeedDropdown, TowerBuildCostDropdown, MonsterDefenseDropdown, MonsterHipPointDropdown, MonsterSpeedDropdown, Difficult, CheckPoint };
        if (LocalMessage.LocalIdentity != 0)
        {
            foreach (InputField field in tempIF)
            {
                field.enabled = false;
            }
            foreach (Dropdown d in tempD)
            {
                d.enabled = false;
            }
        }
        else
        {
            foreach (InputField field in tempIF)
            {
                field.enabled = true;
            }
            foreach (Dropdown d in tempD)
            {
                d.enabled = true;
            }
        }
        byte[] msg = new byte[8];
        SmallTools.CopyArray(msg, SmallTools.ToByteArray(LocalMessage.LocalPlayerNumber));
        LocalMessage.scom.SendMessage(MsgType.PlayerMsgInRoom, msg);
    }
        public void TestExecute()
        {
            var testResults = new TestResults();

            testResults.Log.Set(true);
            var mailbox = new TestMailbox(testResults);
            var actor   = new CountTakerActor(testResults);

            testResults.Until = Until(Total);

            for (var count = 0; count < Total; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
                dispatcher.Execute(mailbox);
            }
            testResults.Until.Completes();

            for (var idx = 0; idx < testResults.Counts.Count; ++idx)
            {
                Assert.Contains(idx, testResults.Counts);
            }
        }
Example #5
0
        public PagedView(PageProvider pageProvider, LocalMessage templateMessage = null)
            : base(pageProvider, templateMessage)
        {
            FirstPageButton = new ButtonViewComponent(OnFirstPageButtonAsync)
            {
                Emoji = new LocalEmoji("⏮️"),
                Style = LocalButtonComponentStyle.Secondary
            };
            PreviousPageButton = new ButtonViewComponent(OnPreviousPageButtonAsync)
            {
                Emoji = new LocalEmoji("◀️"),
                Style = LocalButtonComponentStyle.Secondary
            };
            NextPageButton = new ButtonViewComponent(OnNextPageButtonAsync)
            {
                Emoji = new LocalEmoji("▶️"),
                Style = LocalButtonComponentStyle.Secondary
            };
            LastPageButton = new ButtonViewComponent(OnLastPageButtonAsync)
            {
                Emoji = new LocalEmoji("⏭️"),
                Style = LocalButtonComponentStyle.Secondary
            };
            StopButton = new ButtonViewComponent(OnStopButtonAsync)
            {
                Emoji = new LocalEmoji("⏹️"),
                Style = LocalButtonComponentStyle.Secondary
            };

            AddComponent(FirstPageButton);
            AddComponent(PreviousPageButton);
            AddComponent(NextPageButton);
            AddComponent(LastPageButton);
            AddComponent(StopButton);
        }
Example #6
0
        public void TestClose()
        {
            var dispatcher = new ManyToOneConcurrentArrayQueueDispatcher(MailboxSize, 2, 4, 10);

            dispatcher.Start();
            var mailbox = dispatcher.Mailbox;
            var actor   = new CountTakerActor();

            actor.Until = Until(MailboxSize);
            for (var i = 1; i <= MailboxSize; ++i)
            {
                var countParam = i;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            actor.Until.Completes();
            dispatcher.Close();

            const int neverReceived = MailboxSize * 2;

            for (var count = MailboxSize + 1; count <= neverReceived; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            Assert.Equal(MailboxSize, actor.Highest.Get());
        }
Example #7
0
 void OnDisable()
 {
     xml.Close();
     TowerFileXml.Close();
     UIFunction.ClearChild(MapPanel);
     LocalMessage.SetHandler(null);
 }
Example #8
0
        public void TestNotifyOnSendDispatch()
        {
            var mailboxSize = 64;
            var testResults = new TestResults(mailboxSize);

            var dispatcher = new ManyToOneConcurrentArrayQueueDispatcher(mailboxSize, 1000, true, 4, 10);

            dispatcher.Start();

            var mailbox = dispatcher.Mailbox;

            var actor = new CountTakerActor(testResults);

            for (var count = 1; count <= mailboxSize; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var localMessage = new LocalMessage <ICountTaker>(actor, consumer, "take(int)");

                // notify if in back off
                mailbox.Send(localMessage);

                // every third message give time for dispatcher to back off
                if (count % 3 == 0)
                {
                    Thread.Sleep(50);
                }
            }

            Assert.Equal(mailboxSize, testResults.GetHighest());
        }
 private void InitPreallocated()
 {
     for (int idx = 0; idx < _mailboxSize; ++idx)
     {
         _messages[idx] = new LocalMessage <object>();
     }
 }
        public void TestClose()
        {
            var       testResults = new TestResults();
            const int mailboxSize = 64;
            var       dispatcher  = new RingBufferDispatcher(mailboxSize, 2, 4);

            dispatcher.Start();
            var mailbox = dispatcher.Mailbox;
            var actor   = new CountTakerActor(testResults);

            testResults.Until = Until(mailboxSize);

            for (var count = 1; count <= mailboxSize; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            testResults.Until.Completes();
            dispatcher.Close();

            const int neverReceived = mailboxSize * 2;

            for (var count = mailboxSize + 1; count <= neverReceived; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            Assert.Equal(mailboxSize, testResults.Highest.Get());
        }
Example #11
0
 void OnDisable()
 {
     UIFunction.ClearChild(PlayerListPanel);
     PlayerContainer.Clear();
     ObjectContainer.Clear();
     LocalMessage.SetHandler(null);
 }
        public static async Task <IUserMessage> SendMessageAsync(this IUser user,
                                                                 LocalMessage message,
                                                                 IRestRequestOptions options = null, CancellationToken cancellationToken = default)
        {
            var channel = await user.CreateDirectChannelAsync(options, cancellationToken).ConfigureAwait(false);

            return(await channel.SendMessageAsync(message, options, cancellationToken).ConfigureAwait(false));
        }
        public static Task <IUserMessage> SendMessageAsync(this IMessageChannel channel,
                                                           LocalMessage message,
                                                           IRestRequestOptions options = null, CancellationToken cancellationToken = default)
        {
            var client = channel.GetRestClient();

            return(client.SendMessageAsync(channel.Id, message, options, cancellationToken));
        }
Example #14
0
 public void RequestToShowMessage(LocalMessage message)
 {
     if (userHandler.Receiver?.Name == message.Sender || userHandler.Receiver?.Name == message.Receiver)
     {
         NewMessages.Add(message);
         MessagingCenter.Send(this, MessageKeys.MESSAGE_AVAILABLE, true);
         MessagingCenter.Send(this, MessageKeys.UPDATE_USERS, true);
     }
 }
        public static int GetNextLocalId()
        {
            LocalMessage lastMessage = savedMess.LastOrDefault();

            if (lastMessage is null)
            {
                return(1);
            }
            return(lastMessage.LocalId + 1);
        }
        public void TestDeliverHappy()
        {
            var testResults           = new SimpleTestResults(1);
            var testActor             = TestWorld.ActorFor <ISimple>(Definition.Has <SimpleActor>(Definition.Parameters(testResults), "test1-actor"));
            Action <ISimple> consumer = x => x.Simple();
            var message = new LocalMessage <ISimple>(testActor.ActorInside, consumer, "Simple()");

            message.Deliver();

            Assert.Equal(1, testResults.GetDeliveries());
        }
 public static void AddMessage(LocalMessage message)
 {
     if (message.LocalId == 0)
     {
         message.LocalId = GetNextLocalId();
     }
     if (message.Id == 0 || GetMessageById(message.Id) is null)
     {
         Connection.Insert(message);
     }
 }
Example #18
0
        /// <summary>
        /// Handles simple Http-apis for "reaction" commands
        ///
        /// The incoming argument 0 from context is a collection of IMember, but for later purposes
        /// that type is not required, as we simply use IUser's Mention property, as such converting
        /// down to the lower interface acceptable to allow for implicit targetting
        /// </summary>
        /// <param name="context"></param>
        public static async Task DoReaction(DiscordCommandContext context)
        {
            var          client = context.Services.GetRequiredService <HttpClient>();
            List <IUser> users  = ((IUser?[])context.Arguments[0]).Where(x => x != null).ToList() !;

            var embed = (new LocalEmbed())
                        .WithColor(Program.Color);
            var builder    = new LocalMessage();
            var apiCommand = Program.ApiCommands[context.Command.Name];

            // if no members are specified allow for implicit targeting via the reply system
            if (users.Count == 0 &&
                context.Message.ReferencedMessage.HasValue &&
                context.Message.ReferencedMessage.Value != null &&
                context.Message.ReferencedMessage.Value.Author != null)
            {
                users.Add(context.Message.ReferencedMessage.Value.Author);
            }

            // prepare reaction text if needed
            string?text = null;

            if (apiCommand.Actions.Ranges.Count > 0)
            {
                text = apiCommand.Actions.GetValue(users.Count)?.Random();
            }

            // insert the author as the first "mention"
            users = users.Prepend(context.Author).ToList();

            // insert mentions
            if (text != null)
            {
                // ReSharper disable once CoVariantArrayConversion
                text = string.Format(text, users.Select(x => x.Mention).ToArray());
                embed.WithDescription(text);
            }

            var response = await client.GetAsync(apiCommand.Url);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                await new DiscordResponseCommandResult(context, builder.WithEmbed(embed.WithDescription("An error occurred while fetching reaction!")));
                return;
            }

            // decode the json response, nothing else is supported for the time being
            // we also only care for one level of the response as of now.
            var decoded = JsonConvert.DeserializeObject <Dictionary <string, string> >(await response.Content.ReadAsStringAsync());

            embed.WithImageUrl(apiCommand.GetFixedImageUrl(decoded[apiCommand.Path]));
            await new DiscordResponseCommandResult(context, (new LocalMessage()).WithEmbed(embed));
        }
Example #19
0
        public void TestDeliverHappy()
        {
            var testResults = new SimpleTestResults();

            TestWorld.ActorFor <ISimple>(Definition.Has <SimpleActor>(Definition.Parameters(testResults), "test1-actor"));
            Action <ISimple> consumer = x => x.Simple();
            var message = new LocalMessage <ISimple>(SimpleActor.Instance.Value, consumer, "Simple()");

            message.Deliver();
            testResults.UntilSimple.Completes();

            Assert.Equal(1, testResults.Deliveries.Get());
        }
Example #20
0
        private void LoadChat()
        {
            WebClient wc = new WebClient();

            wc.DownloadStringCompleted += (a, b) => {
                if (b.Error == null)
                {
                    try {
                        this.Status = true;
                        List <LocalMessage> add = new List <LocalMessage>();
                        foreach (KeyValuePair <string, Newtonsoft.Json.Linq.JToken> item in Newtonsoft.Json.JsonConvert.DeserializeObject(b.Result) as Newtonsoft.Json.Linq.JObject)
                        {
                            int          _toAdd = int.Parse(item.Key);
                            LocalMessage lm     = getById(_toAdd);
                            if (lm == null)
                            {
                                lm = new LocalMessage(_toAdd, (string)item.Value);
                                if (lm._id > 0)
                                {
                                    lm.Source = this;
                                    lm.Id     = this._label;
                                    lm.ToMe   = this.ContainKeywords(lm.Text);
                                    add.Add(lm);
                                }
                                _cache.Add(lm);
                            }
                            else
                            {
                            }
                        }

                        if (add.Count > 0)
                        {
                            newMessagesArrived(add);
                        }
                    } catch (Exception er) {
                        App.Log('?', "Gipsyteam error: {0}", er);
                    }
                }
                else
                {
                    //if( b.Error )
                    this.Status = false;
                }
                _timer.Start();
            };
            wc.DownloadStringAsync(new Uri(string.Format(_url, _chatId, DateTime.Now.ToBinary()), UriKind.Absolute));
        }
Example #21
0
    public static void Remove(TEnum type, Action Listener)
    {
        LocalMessage target = null;

        foreach (LocalMessage mb in dic_delegates[type])
        {
            if (mb.e_type == LocalMessage.enum_MessageType.Void && mb.ac_listener == Listener)
            {
                target = mb;
                break;
            }
        }
        if (target != null)
        {
            dic_delegates[type].Remove(target);
        }
    }
Example #22
0
        public void TestDeliverStopped()
        {
            var testResults = new SimpleTestResults();

            TestWorld.ActorFor <ISimple>(Definition.Has <SimpleActor>(Definition.Parameters(testResults), "test1-actor"));
            testResults.UntilSimple = TestUntil.Happenings(1);

            SimpleActor.Instance.Value.Stop();

            Action <ISimple> consumer = actor => actor.Simple();
            var message = new LocalMessage <ISimple>(SimpleActor.Instance.Value, consumer, "Simple()");

            message.Deliver();

            Assert.Equal(1, testResults.UntilSimple.Remaining);
            Assert.Equal(0, testResults.Deliveries.Get());
        }
        private void NewMessage(string msg)
        {
            LocalMessage lm = JsonConvert.DeserializeObject <LocalMessage>(msg);

            TwoRatChat.Model.ChatMessage chatMessage = new TwoRatChat.Model.ChatMessage()
            {
                Date   = DateTime.Now,
                Name   = lm.From,
                Text   = ReplaceSmiles(lm.Text.Replace("&quot;", "\"")),
                Source = this,
                //Form = 0,
                Id   = _id,
                ToMe = this.ContainKeywords(lm.Text)
            };

            newMessagesArrived(new TwoRatChat.Model.ChatMessage[] { chatMessage });
        }
Example #24
0
        public PromptView(LocalMessage message)
            : base(message)
        {
            ConfirmButton = new ButtonViewComponent(OnConfirmButtonAsync)
            {
                Label = "Confirm",
                Style = LocalButtonComponentStyle.Success
            };

            DenyButton = new ButtonViewComponent(OnDenyButtonAsync)
            {
                Label = "Deny",
                Style = LocalButtonComponentStyle.Danger
            };

            AddComponent(ConfirmButton);
            AddComponent(DenyButton);
        }
        public void TestMailboxSendReceive()
        {
            var testResults = new TestResults(Total);
            var actor       = new CountTakerActor(testResults);

            for (var i = 0; i < Total; ++i)
            {
                var countParam = i;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            for (var i = 0; i < Total; ++i)
            {
                Assert.Equal(i, actor.TestResults.GetCounts(i));
            }
        }
Example #26
0
        public async Task <DiscordCommandResult> SourceAsync(string path = null)
        {
            GitHubSource gitHubSource;

            try
            {
                gitHubSource = await _sourceBrowser.GetPathAsync(path);
            }
            catch (HttpRequestException e) when(e.StatusCode == HttpStatusCode.NotFound)
            {
                return(Response("Requested file does not exist!"));
            }

            switch (gitHubSource)
            {
            case null:
                return(Response("Something went wrong while fetching source."));

            case GitHubSourceFile sourceFile when string.IsNullOrWhiteSpace(sourceFile.Content):
                return(Response("The selected text is only whitespace."));

            case GitHubSourceFile sourceFile when sourceFile.Content.Length > LocalMessageBase.MaxContentLength:
            {
                var stream = new MemoryStream(Encoding.Default.GetBytes(sourceFile.Content));
                var msg    = new LocalMessage().WithAttachments(new LocalAttachment(stream, gitHubSource.Filename));
                return(Response(msg));
            }

            case GitHubSourceFile sourceFile:
                return(Response(Markdown.CodeBlock(sourceFile.Filename.Split('.').Last(), sourceFile.Content)));

            case GitHubSourceDirectory sourceDirectory:
            {
                var view         = new SelectionPagedView(new SelectionPageProvider(Array.Empty <SelectionPage>()));
                var pageProvider = new SelectionPageProvider(GetSourceCodePages(sourceDirectory, view));
                view.SetPageProvider(pageProvider);

                return(View(view));
            }

            default:
                throw new ArgumentException($"The type of {nameof(gitHubSource)} was not expected!", nameof(gitHubSource));
            }
        }
Example #27
0
        public void TestBasicDispatch()
        {
            var testResult = new TestResults(MailboxSize);
            var dispatcher = new ManyToOneConcurrentArrayQueueDispatcher(MailboxSize, 2, false, 4, 10);

            dispatcher.Start();
            var mailbox = dispatcher.Mailbox;
            var actor   = new CountTakerActor(testResult);

            for (var count = 1; count <= MailboxSize; ++count)
            {
                var countParam = count;
                Action <ICountTaker> consumer = consumerActor => consumerActor.Take(countParam);
                var message = new LocalMessage <ICountTaker>(actor, consumer, "Take(int)");
                mailbox.Send(message);
            }

            Assert.Equal(MailboxSize, testResult.GetHighest());
        }
Example #28
0
 private Dictionary <ushort, GameObject> RoomContainer2 = new Dictionary <ushort, GameObject>(); //房间号——组件
 // Use this for initialization
 void OnEnable()
 {
     if (LocalMessage.scom == null)
     {
         LocalMessage.scom = new SocketCom();
         if (!LocalMessage.scom.Initialize())
         {
             EditorUtility.DisplayDialog("网络连接失败", "无法连接到服务器", "返回主菜单");
             BackMainMenu();
             return;
         }
         LocalMessage.SetHandler(MessageHandle);
     }
     else
     {
         LocalMessage.scom.SendMessage(MsgType.RoomMsgList);
     }
     //EditorUtility.DisplayDialog("打开", "进入大厅", "关闭");
 }
Example #29
0
        public async Task RandomColorAsync(Color color)
        {
            var colorImagePath = _colorService.GetColorImage(color.ToString());

            using (var colorImage = LocalAttachment.File(colorImagePath, "colorImage.png"))
            {
                var eb = new LocalEmbed()
                         .WithColor(color)
                         .WithDescription($"Hex: {color.ToString()}\nRGB: {color.R} {color.G} {color.B}")
                         .WithImageUrl("attachment://colorImage.png");

                var mb = new LocalMessage()
                         .WithAttachments(colorImage)
                         .WithEmbeds(eb);

                await Response(mb);
            }

            File.Delete(colorImagePath);
        }
Example #30
0
        public void SyncMessage(MessageSyncInfo messageSyncInfo)
        {
            LocalMessage message = LocalMessageRepository
                                   .GetMessageByLocalIdAndSenderName(messageSyncInfo.LocalId, messageSyncInfo.SenderName);

            if (message is null)
            {
                return;
            }

            message.Id         = messageSyncInfo.Id;
            message.SendedTime = messageSyncInfo.NewDateTime;
            SaveAndShowMessage(message);

            RequestToHideMessage(
                LocalMessageRepository.GetMessageByLocalIdAndSenderName(message.LocalId, message.Sender));
            LocalMessageRepository.RemoveMessageByLocalIdIfWithoutId(message.LocalId);

            ServerConnectionHandler.RequestsToSend.Add(
                RequestConverter.ComposeMessageSynchronised(message.Id));
        }