Exemple #1
0
        public void Start()
        {
            TcpListener serverSocket = new TcpListener(IPAddress.Any, 8888);

            serverSocket.Start();

            Console.WriteLine("Chat Server Started ....");

            TcpClient clientSocket;

            while (true)
            {
                clientSocket = serverSocket.AcceptTcpClient();
                clientSocket.ReceiveBufferSize = 4096;

                byte[] bytesFrom = new byte[4096];

                //when client connects to server he sends:
                // -his username
                // -person username that he wants to chat with
                NetworkStream networkStream = clientSocket.GetStream();
                networkStream.Read(bytesFrom, 0, clientSocket.ReceiveBufferSize);

                string dataFromClient = Encoding.ASCII.GetString(bytesFrom);
                dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));

                string[] data = dataFromClient.Split(':');

                clientsList.Add(data[0], clientSocket);

                if (!data[1].Equals(""))
                {
                    UpdatePairTalk(data[0], data[1]);
                }

                PairTalk pair = CheckIfPairExist();

                if (pair != null)
                {
                    PairHandler pairHandler = new PairHandler(
                        (TcpClient)clientsList[pair.ClientName1], pair.ClientName1,
                        (TcpClient)clientsList[pair.ClientName2], pair.ClientName2);
                    BroadcastOldChat(pairHandler.OldChatHistory, pairHandler.Client1, pairHandler.Client2);

                    clientsList.Remove(pair.ClientName1);
                    clientsList.Remove(pair.ClientName2);
                    pairs.Remove(pair);

                    Console.WriteLine("Conversation started between " + pair.ClientName1 + " and " + pair.ClientName2);
                    NotifyThatConversationStarted(pairHandler);
                }
            }
        }
Exemple #2
0
        private void UpdatePairTalk(string client1, string client2)
        {
            PairTalk pair         = new PairTalk(client1, client2);
            bool     alreadyExist = false;

            foreach (PairTalk pairTalk in pairs)
            {
                if (pair.Equals(pairTalk))
                {
                    alreadyExist = true;
                    break;
                }
            }

            if (!alreadyExist)
            {
                pairs.Add(new PairTalk(client1, client2));
            }
        }
Exemple #3
0
        private PairTalk CheckIfPairExist()
        {
            List <string> names = new List <string>();
            PairTalk      pair  = null;

            foreach (DictionaryEntry item in clientsList)
            {
                names.Add(item.Key.ToString());
            }

            foreach (PairTalk pairTalk in pairs)
            {
                if (names.Contains(pairTalk.ClientName1) && names.Contains(pairTalk.ClientName2))
                {
                    pair = pairTalk;
                    pairs.Remove(pairTalk);
                    break;
                }
            }

            return(pair);
        }