コード例 #1
0
 public void StopSelectedBoatDataRefreshTask()
 {
     if (SelectedBoatCancellationTokenSource != null)
     {
         SelectedBoatCancellationTokenSource.Cancel();
         NmeaServer.Stop();
         MessageHub.PublishAsync(new BoatDataServiceStatusChanged(Global.Instance, false));
     }
 }
コード例 #2
0
        public async Task All_Registered_Message_Handler_Services_Are_Invoked_For_Each_Published_Message()
        {
            IMessageHandler <TestMessage> testMessageHandler1 = A.Fake <IMessageHandler <TestMessage> >();
            IMessageHandler <TestMessage> testMessageHandler2 = A.Fake <IMessageHandler <TestMessage> >();
            IServiceProvider services = A.Fake <IServiceProvider>();

            A.CallTo(() => services.GetService(typeof(IEnumerable <IMessageHandler <TestMessage> >))).Returns(new IMessageHandler <TestMessage>[] { testMessageHandler1, testMessageHandler2 });
            IMessageHub hub = new MessageHub(services);
            await hub.PublishAsync(new TestMessage { Id = 123 });

            A.CallTo(() => testMessageHandler1.HandleAsync(A <TestMessage> .That.Matches(msg => msg.Id == 123))).MustHaveHappenedOnceExactly();
            A.CallTo(() => testMessageHandler2.HandleAsync(A <TestMessage> .That.Matches(msg => msg.Id == 123))).MustHaveHappenedOnceExactly();
        }
コード例 #3
0
        public void LaunchSelectedBoatDataRefreshTask()
        {
            StopSelectedBoatDataRefreshTask();

            if (SelectedBoatNumber != null)
            {
                SelectedBoatCancellationTokenSource = new CancellationTokenSource();

                Tasks.RefreshSelectedBoat(SelectedBoatCancellationTokenSource.Token);
                NmeaServer.Start();
                TimeSpan t = TimeSpan.FromMilliseconds(Conf.REQUEST_RATE);
                string humanReadableRate = string.Format("{0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms", t.Hours, t.Minutes, t.Seconds, t.Milliseconds);
                MessageHub.PublishAsync(new LogMessage(this, new LogText($"{Texts.GetString("RequestRateInformation")}{humanReadableRate}")));
                MessageHub.PublishAsync(new BoatDataServiceStatusChanged(Global.Instance, true));
            }
        }
コード例 #4
0
        public async Task <FollowResponseMessage> Follow(string userId)
        {
            MessageHub.PublishAsync(new BeforeFollowEvent(this, userId));
            dynamic syncMessage = new JObject();

            syncMessage._uuid      = _authSettings.Guid;
            syncMessage._uid       = _authSettings.UserId;
            syncMessage._csrftoken = _authSettings.Token;
            syncMessage.user_id    = userId;

            var content = SignedContent(syncMessage.ToString());

            var followReponse = await WebApi.PostEntityAsync <FollowResponseMessage>(string.Format(PostFollow, userId), content);

            MessageHub.PublishAsync(new AfterFollowEvent(this, userId));
            return(followReponse);
        }
コード例 #5
0
        public async Task <LikeResponseMessage> Like(Media media, CancellationToken token)
        {
            MessageHub.PublishAsync(new BeforeLikeEvent(this, media));
            dynamic syncMessage = new JObject();

            syncMessage._uuid      = _authSettings.Guid;
            syncMessage._uid       = _authSettings.UserId;
            syncMessage._csrftoken = _authSettings.Token;
            syncMessage.media_id   = media.Id;

            var content = SignedContent(syncMessage.ToString());

            var likeResponse = await Retry.Do(WebApi.PostEntityAsync <LikeResponseMessage>(string.Format(PostLike, media.Id), content, token), token);

            MessageHub.PublishAsync(new AfterLikeEvent(this, media));
            return(likeResponse);
        }
コード例 #6
0
        public async Task When_publishing_using_async()
        {
            var hub = new MessageHub();

            var queue = new ConcurrentQueue <string>();

            hub.Subscribe <string>(async msg =>
            {
                await Task.Delay(1);
                queue.Enqueue(msg);
            });

            await hub.PublishAsync("A");

            queue.Count.ShouldBe(1);

            queue.TryDequeue(out var receivedMsg).ShouldBeTrue();
            receivedMsg.ShouldBe("A");
        }
コード例 #7
0
 private void NmeaServer_OnNMEASent(string nmea)
 {
     MessageHub.PublishAsync(new LogMessage(this, new LogText($"{Texts.GetString("NMEASent")} {Environment.NewLine}{nmea}", Color.Gray)));
 }
コード例 #8
0
 private void NmeaServer_OnServerError(Exception exception)
 {   
     MessageHub.PublishAsync(new LogMessage(this, new LogText($"{Texts.GetString("NMEAServerError")}{exception.Message}\r\n", Color.Red)));
     StopSelectedBoatDataRefreshTask();
 }
コード例 #9
0
 private void NmeaServer_OnClientConnected(string address)
 {
     MessageHub.PublishAsync(new LogMessage(this, new LogText($"{Texts.GetString("ClientConnected")}{address}")));
     NmeaServer.SendData();
 }