private void sendMessage(MessageItem messageItem)
        {
            Console.WriteLine("client ip: " + clientIP);
            try
            {
                TcpClient client = new TcpClient(clientIP, port);
                messageItem.UserName    = this.hostIP;
                messageItem.MessageTime = DateTime.Now.ToString("h:mm:ss tt");
                var jsonObjectToSend    = Utilities.convertMessageItemToJSON(messageItem);
                var encapsulatedMessage = KarolProtocol.encapsulteMessageInProtocol(jsonObjectToSend);
                Console.WriteLine("json to send: " + jsonObjectToSend);

                //byte[] sendData = Utilities.stringToBytes(encapsulatedMessage);
                //for testing that it works
                byte[] sendData = Utilities.stringToBytes(jsonObjectToSend);

                NetworkStream stream = client.GetStream();
                Console.WriteLine("byte len sent: " + sendData.Length);
                stream.Write(sendData, 0, sendData.Length);

                stream.Close();
                client.Close();
            }
            catch (System.Net.Sockets.SocketException e)
            {
                showNoValidIPDialogBox();
            }
        }
        public void StartHostServer()
        {
            IPAddress ip = Dns.GetHostEntry(hostIP).AddressList[0];

            hostIP = ip.ToString();
            TcpListener server = new TcpListener(ip, port);
            TcpClient   client = default(TcpClient);

            try
            {
                server.Start();
                Console.WriteLine("Server started...");
                Console.Read();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.Read();
            }

            while (true)
            {
                client = server.AcceptTcpClient();
                string address = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                Console.WriteLine("Client connected with IP {0}", ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());
                if (!usersObservableList.Contains(address))
                {
                    showConnectionRequestDialogBox(address);
                }
                else
                {
                    byte[]        receivedBuffer = new byte[10000000];
                    NetworkStream stream         = client.GetStream();

                    stream.Read(receivedBuffer, 0, receivedBuffer.Length);

                    this.Dispatcher.Invoke(() =>
                    {
                        //thanks to this the integrity of the message is preserved
                        try
                        {
                            var json = Utilities.bytesToString(receivedBuffer);
                            var decapsulatedMessage = KarolProtocol.decapsulateMessage(json);
                            var message             = Utilities.convertJSONToMessageItem(decapsulatedMessage);
                            conversationDict[address].Add(message);
                            Utilities.saveInstanceOnDisk(conversationDict);
                            updateConversationBox(message, address);
                        }
                        catch (IncorrectProtocolException e)
                        {
                            Console.WriteLine(e.ToString());
                        }
                    });
                    Console.Read();
                }
            }
        }