Exemplo n.º 1
0
        public static async Task Main(string[] args)
        {
            for (var i = 0; i < args.Length; i++)
            {
                if (args[i] == "server" || args[i] == "azure")
                {
                    server = true;
                }
            }

            #region Login

            // get json
            var loginInfo = JsonSerializer.Serialize(new LoginInfo
            {
                Name       = name,
                BirthDate  = birthDate,
                Gender     = gender,
                DeviceType = DeviceType.Console,
                DeviceId   = "87989c4a-0bf7-42e3-89dd-abc17bacd2bd"
            });

            Console.WriteLine(tokenUrl);

            // get Token
            response = await client.PostAsync(
                tokenUrl,
                new StringContent(loginInfo, Encoding.UTF8, "application/json"));

            responseString = await response.Content.ReadAsStringAsync();

            var responseObject = JsonSerializer.Deserialize <LoginResponse>(responseString);

            var token = responseObject.token;

            Console.WriteLine($"Got Token: " + token);

            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            #endregion

            #region Init and Connect to SignalR

            // Subscribe messagingService events
            messagingService.Connecting       += (s, e) => Console.WriteLine(e.Message);
            messagingService.ConnectionFailed += (s, e) => Console.WriteLine(e.Message);
            messagingService.Connected        += (s, e) => Console.WriteLine(e.Message);

            messagingService.Closed       += (s, e) => Console.WriteLine(e.Message);
            messagingService.Reconnecting += (s, e) => Console.WriteLine(e.Message);
            messagingService.Reconnected  += async(s, e) =>
            {
                Console.WriteLine(e.Message);
                if (currentRoomId != null)
                {
                    await messagingService.JoinRoomAsync(currentRoomId, name);
                }
            };

            messagingService.MessageReceived += Service_OnMessageReceived;
            messagingService.SomeoneEntered  += Service_OnEntered;
            messagingService.SomeoneLeft     += Service_OnLeft;

            // Initialize the messaging service
            messagingService.Init(hubUrl, token);

            // Connect to hub
            await messagingService.ConnectAsync();

            Console.WriteLine("-----------------------------------");
            Console.WriteLine($"OK, {hubUrl} 접속({messagingService.ConnectionId})");
            Console.WriteLine("-----------------------------------");
            #endregion

            #region room list

            await RefreshUserListAsync();

            await ShowUsersAsync();

            #endregion

            #region Choose and join the Constants.Room

            // TODO: 콘솔은 admin이므로 현재 열려 있는 방의 목록을 보여준다.
            // TODO: 방에 입장.

            #endregion

            #region Chat
            var keepGoing = true;
            do
            {
                var text = Console.ReadLine();

                if (text == "exit")
                {
                    keepGoing = false;
                }

                else if (roomList.ContainsKey(text))
                {
                    await messagingService.JoinRoomAsync(roomList[text], name);

                    currentRoomId = roomList[text];

                    Console.WriteLine($"--- Joined to {text}({currentRoomId})  ---");
                }

                else if (text == "leave")
                {
                    await messagingService.LeaveRoomAsync(currentRoomId, name);

                    currentRoomId = null;
                    await ShowUsersAsync();
                }

                else if (text == "list")
                {
                    await ShowUsersAsync();
                }

                else
                {
                    if (currentRoomId != null)
                    {
                        await messagingService.SendMessageToRoomAsync(currentRoomId, name, text);
                    }
                    else
                    {
                        await ShowUsersAsync();
                    }
                }
            } while (keepGoing);
            #endregion
        }