コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
            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);
                }
            }
コード例 #3
0
        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  = "";
            }
        }