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"); }
// 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); } }