public HttpResponseMessage RegisterServer(uint port, uint type, string format, uint threadCount, uint queueSize)
        {
            try
            {
                if (CheckRegisterParametrs(port, type, format, threadCount, queueSize))
                {
                    //Создаем новый объект типа сервер
                    Server server = new Server(port, (Server.ServerType)type, GetClientIp(Request), format.ToLower(), threadCount, queueSize);

                    //Регистрируем его
                    ServerCollection.registerServer(server);

                    //Возвращаем успех
                    return Request.CreateResponse(HttpStatusCode.OK, server);

                }
                else
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Регистарция сервера невозможна. Неверные параметры сервера");
                }

            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message);
            }


        }
        //Регистрирует указанный сервер
        public static void registerServer(Server server)
        {
            if (server.isAvailable())
            {
                Server sameAddressServer = getServerByAddress(server.Address, server.Port);
                if (sameAddressServer == null)
                {
                    addServer(server);
                }
                else
                {
                    updateServer(sameAddressServer.Id, server);
                    server.Id = sameAddressServer.Id;
                }
            }
            else
            {
                throw new Exception("Регистрация невозможна, сервер не отвечает на запросы");
            }

        }
        //Возвращает список серверов по типу и формату
        public static List<Server> getServersByTypeAndFormat(uint type, string format)
        {
            MySqlCommand command = new MySqlCommand();
            command.CommandText = "SELECT * FROM SERVER, FORMAT WHERE FORMAT.NAME_FORMAT=@format AND SERVER.TYPE=@type AND SERVER.FORMAT_ID=FORMAT.ID";
            command.Parameters.AddWithValue("@type", type);
            command.Parameters.AddWithValue("@format", format);

            DataTable serversDt = QueryExecutor.ExecuteQuery(command);

            List<Server> serversList = new List<Server>();

            foreach (DataRow row in serversDt.Rows)
            {
                uint id = uint.Parse(row[0].ToString());
                uint port = uint.Parse(row[2].ToString());
                uint threadCount = uint.Parse(row[5].ToString());
                uint queueSize = uint.Parse(row[6].ToString());
                Server newServer = new Server(id, port, (Server.ServerType)type, row[1].ToString(), format, threadCount, queueSize);
                serversList.Add(newServer);
            }

            return serversList;
        }
        //Обнавляет сервер с указаным id, беря параметры из второй переменной
        public static void updateServer(uint serverId, Server server)
        {
            //Созадем подключение к БД
            using (MySqlConnection connection = new MySqlConnection(QueryExecutor.mysqlCSB.ConnectionString))
            {

                MySqlTransaction transaction = null;

                try
                {
                    //Открываем его
                    connection.Open();

                    //Начинаем транзакцию
                    transaction = connection.BeginTransaction();

                    //ID формата добавляемого сервера
                    int formatId = addRowReferencedTable(connection, transaction, "FORMAT", server.Format);


                    MySqlCommand command = new MySqlCommand("SET foreign_key_checks = 0;", connection, transaction);
                    command.ExecuteNonQuery();

                    //Выполняем запрос по изменению
                    command.CommandText = "UPDATE SERVER SET ADDRESS=@address, PORT=@port, TYPE=@type, "
                        + "FORMAT_ID=@formatId, THREAD_COUNT=@threadCount, QUEUE_SIZE=@queueSize WHERE SERVER.ID = @serverId";
                    command.Parameters.AddWithValue("@serverId", serverId);
                    command.Parameters.AddWithValue("@address", server.Address);
                    command.Parameters.AddWithValue("@port", server.Port);
                    command.Parameters.AddWithValue("@type", server.Type);
                    command.Parameters.AddWithValue("@formatId", formatId);
                    command.Parameters.AddWithValue("@threadCount", server.ThreadCount);
                    command.Parameters.AddWithValue("@queueSize", server.QueueSize);
                    command.ExecuteNonQuery();


                    command.CommandText = "SET foreign_key_checks = 1;";
                    command.ExecuteNonQuery();

                    //Применяем изменения
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                }
            }
        }
        //Добавляет указанный сервер
        public static void addServer(Server server)
        {
            //Созадем подключение к БД
            using (MySqlConnection connection = new MySqlConnection(QueryExecutor.mysqlCSB.ConnectionString))
            {

                MySqlTransaction transaction = null;

                try
                {
                    //Открываем его
                    connection.Open();

                    //Начинаем транзакцию
                    transaction = connection.BeginTransaction();

                    //ID формата добавляемого сервера
                    int formatId = addRowReferencedTable(connection, transaction, "FORMAT", server.Format);


                    MySqlCommand command = new MySqlCommand("SET foreign_key_checks = 0;", connection, transaction);
                    command.ExecuteNonQuery();

                    //Выполняем запрос по вставке сервера
                    command.CommandText = "INSERT INTO SERVER VALUES(NULL, @address, @port, @type, @format_id, @thread_count, @queue_size)";
                    command.Parameters.AddWithValue("@address", server.Address);
                    command.Parameters.AddWithValue("@port", server.Port);
                    command.Parameters.AddWithValue("@type", server.Type);
                    command.Parameters.AddWithValue("@format_id", formatId);
                    command.Parameters.AddWithValue("@thread_count", server.ThreadCount);
                    command.Parameters.AddWithValue("@queue_size", server.QueueSize);
                    command.ExecuteNonQuery();

                    //Получаем Id сервера
                    command.CommandText = "SELECT LAST_INSERT_ID()";
                    server.Id = Convert.ToUInt32(command.ExecuteScalar());

                    command.CommandText = "SET foreign_key_checks = 1;";
                    command.ExecuteNonQuery();

                    //Применяем изменения
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                }
            }
        }