Ejemplo n.º 1
0
        public void ServerStart(string _ipAddress, ushort port, int users)
        {
            IPAddress ipAddress = IPAddress.Parse(_ipAddress);

            textboxLog.AppendText("Starting server: " + ipAddress + ":" + port + "\r \n");
            textboxLog.AppendText("Number of slots: " + users + "\r \n");

            ServerProgram mainServer = new ServerProgram(ipAddress, users);

            ServerProgram.StatusChanged += new StatusChangedEventHandler(mainServer_StatusChanged);

            mainServer.StartListening(port);

            textboxLog.AppendText("Waiting for connections... \r \n");
            textboxLog.AppendText("\n");
        }
Ejemplo n.º 2
0
        // Occures when a new client is accepted
        private void AcceptClient()
        {
            srReceiver = new System.IO.StreamReader(tcpClient.GetStream());
            swSender   = new System.IO.StreamWriter(tcpClient.GetStream());

            // Read the account information from the client
            currUser = srReceiver.ReadLine();

            // We got a response from the client
            if (currUser != "" && ServerProgram.htUsers.Count < ServerProgram.userCount)
            {
                // Store the user name in the hash table
                if (ServerProgram.htUsers.Contains(currUser) == true)
                {
                    // 0 means not connected
                    swSender.WriteLine("0|This username already exists.");
                    swSender.Flush();
                    CloseConnection();
                    return;
                }
                else if (currUser == "Administrator")
                {
                    // 0 means not connected
                    swSender.WriteLine("0|This username is reserved.");
                    swSender.Flush();
                    CloseConnection();
                    return;
                }
                else
                {
                    // 1 means connected successfully
                    swSender.WriteLine("1");
                    swSender.Flush();

                    // Add the user to the hash tables and start listening for messages from him
                    ServerProgram.AddUser(tcpClient, currUser);
                }
            }
            else
            {
                swSender.WriteLine("0|\nThere are already " + ServerProgram.htUsers.Count + "/" + ServerProgram.userCount + " people in the server");
                swSender.Flush();
                CloseConnection();
                return;
            }

            try
            {
                // Keep waiting for a message from the user
                while ((strResponse = srReceiver.ReadLine()) != "")
                {
                    strResponse = ServerProgram.DecryptString(strResponse, initVector);

                    // If it's invalid, remove the user
                    if (strResponse == null)
                    {
                        ServerProgram.RemoveUser(tcpClient);
                    }
                    else if (strResponse.Contains("<pm "))
                    {
                        ServerProgram.SendPrivateMessage(currUser, strResponse);
                    }
                    else
                    {
                        // Otherwise send the message to all the other users
                        ServerProgram.SendMessage(currUser, strResponse);
                    }
                }
            }
            catch
            {
                // If anything went wrong with this user, disconnect them
                ServerProgram.RemoveUser(tcpClient);
            }
        }