示例#1
0
        public Task Publish(PublishMessageCommand command)
        {
            var board = Context.User.FindFirst(ClaimTypes.GroupSid)?.Value;

            if (command.Route.StartsWith(board))
            {
                rabbitManager.Publish(command.Payload, board, ExchangeType.Topic, command.Route);
            }
            else
            {
                this.Context.Abort();
            }

            return(Task.CompletedTask);
        }
示例#2
0
        static async Task Main(string[] args)
        {
            await Task.Delay(20000);

            var client = new HttpClient();

            client.BaseAddress = new Uri("https://localhost:5001/api/board/");
            Console.WriteLine("Hello World!");

            var body = new CreateBoardCommand
            {
                Board = "myapp",
                Key   = "myappkey"
            };

            var json = JsonSerializer.Serialize(body);

            var payload = new StringContent(json, Encoding.UTF8, "application/json");

            var response = await client.PostAsync("create", payload);

            response.EnsureSuccessStatusCode();

            var body2 = new ConnectToBoardCommand
            {
                Board = "myapp",
                Key   = "myappkey",
                Name  = "1234"
            };

            var json2 = JsonSerializer.Serialize(body2);

            var reqMessage = new HttpRequestMessage(HttpMethod.Get, client.BaseAddress + "connect");


            reqMessage.Content = new StringContent(json2, Encoding.UTF8, "application/json");

            var response2 = await client.SendAsync(reqMessage);

            response2.EnsureSuccessStatusCode();

            var str = await response2.Content.ReadAsStringAsync();

            var token = JsonSerializer.Deserialize <TokenModel>(str, new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            }).Token;


            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            var connection = new HubConnectionBuilder()
                             .WithUrl("https://localhost:5001/hub", options =>
            {
                options.AccessTokenProvider = () => Task.FromResult(token);
            }).Build();

            await connection.StartAsync();

            connection.On <object>("pushNotifications", (res) =>
            {
                var json = JsonSerializer.Serialize(res, new JsonSerializerOptions {
                    WriteIndented = true
                });
                Console.WriteLine(json);
            });

            var subcommand = new SubscribeTopicCommand
            {
                Topic = "pushNotifications",
                Route = "myapp.push.user.1234"
            };

            await connection.InvokeAsync("subscribe", subcommand);

            var rand = new Random();

            while (true)
            {
                await Task.Delay(rand.Next(1000, 10000));

                if (new Random().Next(1, 10) % 2 == 0)
                {
                    var pubcmd = new PublishMessageCommand
                    {
                        Route   = "myapp.push.user.1234",
                        Payload = new { Test = "test string", NestObj = subcommand }
                    };
                    await connection.InvokeAsync("publish", pubcmd);
                }
                else
                {
                    var pubcmd = new PublishMessageCommand
                    {
                        Route   = "myapp.push.user.1234",
                        Payload = "striiiing."
                    };
                    await connection.InvokeAsync("publish", pubcmd);
                }
            }
        }