Exemple #1
0
        /// <summary>
        /// Создание нового блока AES с новым вектором шифрования.
        /// </summary>
        /// <returns></returns>
        public static AES_Data NewAES()
        {
            AES_Data New = new AES_Data();

            New.CreateData();
            return(New);
        }
Exemple #2
0
        // Заносит информацию о файле в БД. В будущем сделаю шифрование информации.
        public int Add_To_DB(DB DataBase, AES_Data AES, int Lab, int Person)
        {
            string queryString = @"INSERT INTO `files` 
(`name`, `file_name`, `info`, `laboratory`, `person`)
VALUES ('" + Name + "', '" + FileName + "', @Info, " + Lab.ToString() + ", " + Person.ToString() + @");
SELECT LAST_INSERT_ID(); ";

            MySqlCommand com = DataBase.MakeCommandObject(queryString);

            com.Parameters.AddWithValue("@Info", Data);
            return(Convert.ToInt32(com.ExecuteScalar()));
        }
Exemple #3
0
 public Communication()
 {
     Crypt = AES_Data.NewAES();
 }
Exemple #4
0
        /// <summary>
        /// Базовый функционал программы.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            try
            {
                //Подключаемся к БД
                DataBase = new DB(DB_Server, DB_Name, DB_User, DB_Pass);

                Console.WriteLine("Подключение к MySQL: 127.0.0.1:3306");
            }
            catch
            {
                Console.WriteLine("Ошибка подключения к БД");
            }

            // Создаём классы для обработки команд
            List <Commands.ExecutableCommand> BaseCommands = new List <Commands.ExecutableCommand>()
            {
                new Commands.Account(DataBase),
                new Commands.Database(DataBase),
                new Commands.FileEngine(DataBase),
                new Commands.Laboratories(DataBase),
                new Commands.Log(DataBase),
                new Commands.Molecules(DataBase),
                new Commands.Users(DataBase),
                new Commands.Status(DataBase)
            };

            Commands.Log Log = (Commands.Log)(BaseCommands.Where(x => x.Name == "log").ToArray()[0]);

            // Открываем файл-ключ
            CommonAES = (AES_Data)AES_Data.LoadFromFile("vector.bin");

            // Устанавливаем для сокета локальную конечную точку
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 11000);

            // Создаем сокет Tcp/Ip
            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(10);

                Console.WriteLine("Старт сервера");

                // Завершаем все сеансы сообщением о падении сервера.
                DataBase.ExecuteQuery(@"UPDATE `sessions` 
                    SET `quit_date` = CURRENT_TIMESTAMP(), `reason_quit` = 'Server Fail – quit date of restart'
                    WHERE `quit_date` IS NULL;");

                // Начинаем слушать соединения
                while (true)
                {
                    Console.WriteLine($"Ожидаем соединение через порт {ipEndPoint}");

                    // Программа приостанавливается, ожидая входящее соединение
                    Socket handler       = sListener.Accept();
                    Task   NewCommandRun = Task.Run(() => RunCommand(handler, BaseCommands, Log));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Запускает прослушивание порта
        /// </summary>
        public void Start()
        {
            Enabled = true;

            try
            {
                //Подключаемся к БД
                DataBase = new DB(DB_Server, DB_Name, DB_User, DB_Pass);

                Log($"Подключение к службе MySQL: {DB_Server}:3306");
            }
            catch
            {
                Exception E = new Exception("Ошибка подключения к БД");
            }

            // Создаём классы для обработки команд
            List <Commands.ExecutableCommand> BaseCommands = new List <Commands.ExecutableCommand>()
            {
                new Commands.Account(DataBase),
                new Commands.Database(DataBase),
                new Commands.FileEngine(DataBase),
                new Commands.Laboratories(DataBase),
                new Commands.Log(DataBase),
                new Commands.Molecules(DataBase),
                new Commands.Users(DataBase),
                new Commands.Status(DataBase)
            };

            Log("Создание команд");

            Commands.Log LogCmd = (Commands.Log)(BaseCommands.Where(x => x.Name == "log").ToArray()[0]);

            Log("Создание команды Log");

            // Открываем файл-ключ
            try
            {
                CommonAES = (AES_Data)Serializable.LoadFromFile(Path.Combine(
                                                                    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                                                                    "vector.bin"));
                Log("открытие ключа");
            }
            catch (Exception e)
            {
                Log(e.Message);
            }

            // Устанавливаем для сокета локальную конечную точку
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 11000);

            // Создаем сокет Tcp/Ip
            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            Log("Создание сокета");

            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(10);

                Log("Старт сервера");

                // Завершаем все сеансы сообщением о падении сервера.
                DataBase.ExecuteQuery(@"UPDATE `sessions` 
                    SET `quit_date` = CURRENT_TIMESTAMP(), `reason_quit` = 'Server Fail – quit date of restart'
                    WHERE `quit_date` IS NULL;");

                // Начинаем слушать соединения
                while (Enabled)
                {
                    Log($"Ожидаем соединение через порт {ipEndPoint}");

                    // Программа приостанавливается, ожидая входящее соединение
                    Socket handler = sListener.Accept();
                    Log($"Сигнал получен. Передаём в отдельный поток");
                    //Task NewCommandRun = Task.Run(() => RunCommand(handler, BaseCommands, LogCmd));
                    RunCommand(handler, BaseCommands, LogCmd);
                }
            }
            catch (Exception ex)
            {
                Log(ex.ToString());
            }
            finally
            {
            }
        }