예제 #1
0
        public async Task Should_ignore_empty_manual_checkpoint()
        {
            SystemClock.UseRealClock();
            var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build());

            using var svc = CreateCheckpointService();
            var wsConnection = new HubConnectionBuilder()
                               .WithUrl($"{svc.ListenUri}/ws/cp")
                               .Build();
            var checkpoints = new List <Checkpoint>();
            await wsConnection.StartAsync();

            await wsConnection.SendCoreAsync("Subscribe", new object[] { DateTime.UtcNow.AddHours(-1) });

            wsConnection.On("Checkpoint", (Checkpoint[] cp) => checkpoints.AddRange(cp));
            var wsConnected = false;

            wsConnection.On("ReaderStatus", (ReaderStatus s) => wsConnected = true);
            await new Timing().ExpectAsync(() => wsConnected);
            var cli = new HttpClient();

            (await cli.PutAsync($"{svc.ListenUri}/cp",
                                new StringContent("\"\"", Encoding.UTF8, "application/json"))).EnsureSuccessStatusCode();
            (await new Timing()
             .Timeout(5000)
             .Logger(Logger)
             .WaitAsync(() => checkpoints.Count > 0)).Should().BeFalse();
        }
예제 #2
0
        static async Task Main(string[] args)
        {
            string baseUrl = "http://localhost:5000/main";

            var connection = new HubConnectionBuilder()
                             .WithUrl(baseUrl)
                             .Build();

            connection.Closed += async(error) =>
            {
                await Task.Delay(new Random().Next(0, 5) * 1000);

                await connection.StartAsync();
            };

            await connection.StartAsync();

            connection.On <string>("Send", Console.WriteLine);
            await connection.SendCoreAsync("Echo", new object[] { "TEST" });

            var reader = await connection.StreamAsChannelAsync <int>("ChannelCounter", 10, 2000);

            while (await reader.WaitToReadAsync())
            {
                while (reader.TryRead(out var item))
                {
                    Console.WriteLine($"received: {item}");
                }
            }
        }
예제 #3
0
        private static void Main(string[] args)
        {
            var connection = new HubConnectionBuilder().WithUrl("https://localhost:44318/msg").Build();

            connection.On("ReceiveMessage", (string sender, string message) => Console.WriteLine($"{sender} says: {message}"));

            connection.Closed += async error =>
            {
                Console.WriteLine(error);
                await connection.StartAsync();
            };

            connection.StartAsync().Wait();

            var exitKey = string.Empty;

            while (true)
            {
                var line = Console.ReadLine();
                if (line == "/q")
                {
                    break;
                }

                var joinMatch = new Regex("/j (.+)");
                if (joinMatch.IsMatch(line))
                {
                    var groupName = joinMatch.Match(line).Groups[1].ToString();
                    // Console.WriteLine("join " + groupName);
                    connection.SendCoreAsync("AddToGroup", new[] { appName, groupName });
                    continue;
                }

                var tellMatch = new Regex("/t ([^ ]+) (.+)");
                if (tellMatch.IsMatch(line))
                {
                    var groupName = tellMatch.Match(line).Groups[1].ToString();
                    var message   = tellMatch.Match(line).Groups[2].ToString();
                    connection.SendCoreAsync("SendGroup", new[] { appName, groupName, message });
                    continue;
                }



                connection.SendCoreAsync("Broadcast", new[] { appName, line });
            }
        }
예제 #4
0
        public async Task Should_stream_checkpoints_over_websocket()
        {
            SystemClock.UseRealClock();
            var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build());

            using var svc = CreateCheckpointService();
            tagListHandler.ReturnOnce(new Tag {
                TagId = "1"
            });
            tagListHandler.ReturnOnce(new Tag {
                TagId = "2"
            });
            var wsConnection = new HubConnectionBuilder()
                               .WithUrl($"{svc.ListenUri}/ws/cp")
                               .Build();
            var checkpoints = new List <Checkpoint>();
            await wsConnection.StartAsync();

            await wsConnection.SendCoreAsync("Subscribe", new object[] { DateTime.UtcNow.AddHours(-1) });

            wsConnection.On("Checkpoint", (Checkpoint[] cp) => checkpoints.AddRange(cp));
            var wsConnected = false;

            wsConnection.On("ReaderStatus", (ReaderStatus s) => wsConnected = true);
            await new Timing().ExpectAsync(() => wsConnected);
            tagListHandler.ReturnOnce(new Tag {
                TagId = "3"
            });
            tagListHandler.ReturnOnce(new Tag {
                TagId = "4"
            });
            await new Timing()
            .Logger(Logger)
            .FailureDetails(() => $"checkpoints.Count = {checkpoints.Count}")
            .ExpectAsync(() => checkpoints.Count >= 4);
        }