private static void Server_Thread() { TcpClient tcpClient; TcpListener server = null; try { server = new TcpListener(IPAddress.Any, port); server.Start(); while (true) { tcpClient = server.AcceptTcpClient(); Client_Stream client = new Client_Stream(tcpClient); Thread tcpClientThread = new Thread(new ThreadStart(client.tcpConnection)); tcpClientThread.IsBackground = true; tcpClientThread.Start(); } } catch (Exception exception) { Console.WriteLine(exception); File.AppendAllText(log_patch, exception.ToString()); } finally { if (server != null) { server.Stop(); } } }
static public void Send_message(Message mail, Client_Stream user, bool bSave_to_story) { string mess = JsonSerializer.Serialize <Message>(mail) + "\n"; user.stream.Write(Encoding.UTF8.GetBytes(mess)); if (bSave_to_story) { DataWR.save_message(mail); } }
static void Main(string[] args) { if (!File.Exists(user_data_patch)) { FileStream user_data = File.Create(user_data_patch); user_data.Close(); } if (!Directory.Exists(Directory.GetCurrentDirectory() + @"\" + message_history_name)) { Directory.CreateDirectory(Directory.GetCurrentDirectory() + @"\" + message_history_name); } Thread sThread = new Thread(Server_Thread); sThread.Name = "Server Thread"; sThread.IsBackground = true; sThread.Start(); bool isend = false; string command = "", commtext; while (!isend) { commtext = Console.ReadLine(); int b = commtext.Length; for (int i = 0; i <= b - 1; i++) { if (commtext[i] == ' ') { break; } command = command + commtext[i]; } string com = commtext; commtext = ""; bool f = false; for (int i = 0; i <= b - 1; i++) { if (com[i] == ' ') { f = true; } if (f) { commtext = commtext + com[i]; } } switch (command) { case "stop": //Останавливает сервер isend = true; break; case "help": //Выводит доступные команды для сервера Console.WriteLine("Список доступных команд: " + "\n1)stop - остановка сервера" + "\n2)help - выводит все доступные команды для сервера" + "\n3)list - показывает список подключенных пользователей" + "\n4)mail - <mail имя_пользователя сообщение> отправка сообщения одному пользователю" + "\n5)say - <say сообщение> отправка сообщения всем пользователям от имени сервера" + "\n6)admin - <admin имя_пользователя> выдача прав администратора\n" + "\n7)mute <user name> - блокировка отправки сообщения для определённого пользователя"); break; case "list": //Список подключенных пользователей if (1 > online_list.Count) { Console.WriteLine("В настоящий момент онлайна нет =(\n"); break; } int i = 1; foreach (Client_Stream client in online_list) { Console.WriteLine(i++ + ")" + client.name + "\n");; } Console.WriteLine("\n"); break; case "mail": //Отправка сообщения одному пользователю break; case "say": //Отправка сообщения всем пользователям от имени сервера foreach (Client_Stream user in online_list) { /* Messenger_Server_Part.Program.Client_Stream. some_data; * some_data = new List<byte>(); * Message mail = new Message(); ; * int count = 1; * Messenger_Server_Part.Program.Client_Stream stream; * // чтение сообщений * do * { * count += stream.Read(buffer); * some_data.AddRange(buffer); * } while (stream.DataAvailable); * if (count % buffer.Length != 0) some_data.RemoveRange(count, some_data.Count - count); * if (count != 0) * { * MemoryStream ms = new MemoryStream(crypt.Decrypt(some_data.ToArray(), some_data.Count)); * Messenger_Server_Part.Program.Client_Stream.Send_message(mail, user); */ Message a = new Message(); a.reciever = user.name; a.content = commtext; a.sender = "server"; Client_Stream.Send_message(a, user, false); // } } break; case "admin": //Присвоение прав администратора break; case "mute": //выдача мута пользователю break; default: break; } commtext = ""; command = ""; } }