private bool GetPermission(SynchronizationContext uiContext, IJsonContainer container)
        {
            bool userExists = false;

            // if (LogInViewModel.FirstTimeLogin)
            ConnectingToServer();

            TcpSocket.tcpSocket.BeginSend(ConverData.ToSend(PersonList.GetPersonInfo()), 0, ConverData.ToSend(PersonList.GetPersonInfo()).Length, 0, new AsyncCallback(SendCallback), TcpSocket.tcpSocket);
            connectDone.WaitOne();

            TextFromServer = ReceivData(uiContext, container);

            try
            {
                container = ConverData.ToReceiv <JsonContainer>(TextFromServer.ToString());

                //if apruval ok userExists = true
                userExists = true; //just for test!!!!!!!!!!!!
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }



            return(userExists);
        }
        private void Chat(SynchronizationContext uiContext, IJsonContainer container, IMessageContent messageContent)
        {
            while (IsConnected)
            {
                if (!FirstTime)
                {
                    TextFromServer = ReceivData(uiContext, container);
                }

                try
                {
                    container = ConverData.ToReceiv <JsonContainer>(TextFromServer.ToString());
                }
                catch (Exception ex)
                {
                    Console.Write(ex.ToString());
                }

                if (FirstTime)
                {
                    if (container.CurrentPersonId != null)
                    {
                        User.Id = container.CurrentPersonId.Id;
                    }

                    AddToOnlineUserList(uiContext, container);

                    GetAllMessages(messageContent, container, uiContext);


                    FirstTime = false;
                }
                else
                {
                    // Detect if OnlineUsers changed
                    if (container?.Persons?.Count > OnlineUsers.UserList.Count || container?.Persons?.Count < OnlineUsers.UserList.Count)
                    {
                        ChangeOnlineUserList(uiContext, container, TextFromServer.ToString());
                    }
                    else
                    {
                        AddNewMessage(uiContext, messageContent, TextFromServer.ToString());
                    }
                }
            }
        }
        public void Receiving(IWindowsViewModel windowsViewModel, ISignInViewModel loginViewModel, IMessageContent messageContent,
                              ITcpEndPoint tcpEndPoint, IJsonContainer container)
        {
            _tcpEndPoint      = tcpEndPoint;
            _windowsViewModel = windowsViewModel;

            FirstTime = true;

            IsConnected = true;

            var uiContext = SynchronizationContext.Current;

            Task.Run(() =>
            {
                ConnectingToServer();

                TcpSocket.tcpSocket.BeginSend(ConverData.ToSend(PersonList.GetPersonInfo()), 0, ConverData.ToSend(PersonList.GetPersonInfo()).Length, 0, new AsyncCallback(SendCallback), TcpSocket.tcpSocket);
                connectDone.WaitOne();

                while (IsConnected)
                {
                    _windowsViewModel.ChangeView(2);

                    var textFromServer = ReceivData(uiContext, container);

                    try
                    {
                        container = ConverData.ToReceiv <JsonContainer>(textFromServer.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.Write(ex.ToString());
                    }

                    if (FirstTime)
                    {
                        if (container.CurrentPersonId != null)
                        {
                            User.Id = container.CurrentPersonId.Id;
                        }

                        AddToOnlineUserList(uiContext, container);

                        GetAllMessages(messageContent, container, uiContext);


                        FirstTime = false;
                    }
                    else
                    {
                        // Detect if OnlineUsers changed
                        if (container?.Persons?.Count > OnlineUsers.UserList.Count || container?.Persons?.Count < OnlineUsers.UserList.Count)
                        {
                            ChangeOnlineUserList(uiContext, container, textFromServer.ToString());
                        }
                        else
                        {
                            AddNewMessage(uiContext, messageContent, textFromServer.ToString());
                        }
                    }
                }
            });
        }
        private void AddNewMessage(SynchronizationContext uiContext, IMessageContent messageContent, string textFromServer)
        {
            messageContent = ConverData.ToReceiv <MessageContent>(textFromServer);

            uiContext.Send(x => MessageList.Items.Add(messageContent), null);
        }