コード例 #1
0
        public void InsertToChat(string chatId)
        {
            var dataChat = new InsertToChatMessageModel
            {
                RequestType = "InsertToChat",
                ChatId      = chatId,
                From        = Name
            };

            Thread thread = new Thread(() => { ListenAnswerTCP(Client); });

            thread.Start();


            dataChat.MessageChat = $"User {Name} connected to chat";
            _requestHandler.SendData(Client, Utils.SerlizeObject(dataChat));

            while (true)
            {
                Console.WriteLine("Please enter message to send");
                string inputMessage = Console.ReadLine();
                Console.WriteLine($"You : {inputMessage}");
                dataChat.MessageChat = inputMessage;

                _requestHandler.SendData(Client, Utils.SerlizeObject(dataChat));
                if (inputMessage == "exit")
                {
                    break;
                }
            }
        }
コード例 #2
0
        public void InsertToChat(string chatId)
        {
            var allOldMessages = GetAllOldMessages(chatId);
            var dataChat       = new InsertToChatMessageModel
            {
                RequestType = MessageType.InsertToChat,
                ChatId      = chatId,
                From        = _user.Name
            };

            dataChat.MessageChat = $"User {_user.Name} connected to chat";
            _containerInterfaces.RequestHandler.SendData(_user.Client, Utils.SerlizeObject(dataChat));

            string data             = _containerInterfaces.ResponseHandler.GetResponse(_user.Client);
            var    successSwithChat = Utils.DeSerlizeObject <MainRequest>(data);

            if (successSwithChat.RequestType == MessageType.ErrorResponse)
            {
                var error = Utils.DeSerlizeObject <ErrorMessage>(data);
                Console.WriteLine(error.Error);
                return;
            }
            var successChat = Utils.DeSerlizeObject <OkResponseMessage>(data);


            if (allOldMessages != null)
            {
                _containerInterfaces.SystemOutput.Print(allOldMessages);
            }


            Console.WriteLine(successChat.Message);


            Thread thread = new Thread(() => { ListenAnswerTCP(_user.Client); });

            thread.Start();

            while (true)
            {
                _containerInterfaces.SystemOutput.Print("Please enter message to send | for exit press exit");
                string inputMessage = _containerInterfaces.SystemInput.StringInput();
                _containerInterfaces.SystemOutput.Print($"You : {inputMessage}");



                dataChat.MessageChat = inputMessage;

                _containerInterfaces.RequestHandler.SendData(_user.Client, Utils.SerlizeObject(dataChat));

                if (inputMessage == "exit")
                {
                    break;
                }
            }
        }
コード例 #3
0
        private void SendAll(ChatModule foundChat, InsertToChatMessageModel request, string message)
        {
            var allUserToSend = GetAllConnectedToSend(foundChat, request);

            foreach (var client in allUserToSend)
            {
                if (client.Client.Connected)
                {
                    _requestHandler.SendData(client.Client, message);
                }
            }
        }
コード例 #4
0
        private void ConnectedToChat(string requestData)
        {
            string response = requestData;
            InsertToChatMessageModel request = Utils.DeSerlizeObject <InsertToChatMessageModel>(response);
            var        clientSneder          = _allChatDetails.GetClientByName(Name);
            ChatModule foundChat             = _allChatDetails.GetChatById(request.ChatId);

            lock (locker)
            {
                _allChatDetails.UpdateCurrentChat(clientSneder, foundChat);
            }
            Console.WriteLine(clientSneder.CurrentConnectChat);

            while (true)
            {
                request = Utils.DeSerlizeObject <InsertToChatMessageModel>(response);

                var model = new NewChatMessage
                {
                    RequestType = "NewChatMessage",
                    From        = request.From,
                    Message     = request.MessageChat
                };
                string message = Utils.SerlizeObject(model);
                if (request.MessageChat == "exit")
                {
                    lock (locker)
                    {
                        _allChatDetails.UpdateCurrentChat(clientSneder, null);
                        //clientSneder.CurrentConnectChat = null;
                    }
                    model.Message = $"The user {model.From} disconnect from this chat";
                    SendAll(foundChat, request, $"User");
                    return;
                }

                SendAll(foundChat, request, message);

                foundChat.AddMessage(new MessageModel(MessageType.TextMessage, message, clientSneder, DateTime.Now));
                response = _responseHandler.GetResponse(_allChatDetails.GetClientByName(Name).Client);
            }
        }
コード例 #5
0
        private List <ClientModel> GetAllConnectedToSend(ChatModule chat, InsertToChatMessageModel request)
        {
            //var allUserToSend = chat.Clients.Where(c => c.Name != request.From && c.Connected == true && c.CurrentConnectChat.ChatId == chat.ChatId);
            List <ClientModel> ls = new List <ClientModel>();

            foreach (var client in chat.Clients)
            {
                if ((client.Name != request.From) && (client.Connected == true))
                {
                    if (client.CurrentConnectChat != null)
                    {
                        if (client.CurrentConnectChat.ChatId == chat.ChatId)
                        {
                            lock (locker)
                            {
                                ls.Add(client);
                            }
                        }
                    }
                }
            }

            return(ls);
        }
コード例 #6
0
 private bool ValidateFirstConnectionToChat(IClientModel clientSneder, ChatModule chat, InsertToChatMessageModel data)
 {
     if (clientSneder.CurrentConnectChat == null)
     {
         if (chat == null)
         {
             var errorBody = new ErrorMessage
             {
                 RequestType = MessageType.ErrorResponse,
                 Error       = $"There is not chat with id {data.ChatId}"
             };
             _containerInterfaces.RequestHandler.SendData(clientSneder.Client, Utils.SerlizeObject(errorBody));
             return(false);
         }
         else
         {
             var successBody = new OkResponseMessage
             {
                 RequestType = MessageType.SuccessResponse,
                 Message     = $"user {data.From} in chat with {data.ChatId}"
             };
             _containerInterfaces.RequestHandler.SendData(clientSneder.Client, Utils.SerlizeObject(successBody));
             return(true);
         }
     }
     return(true);
 }