コード例 #1
0
ファイル: APIs.cs プロジェクト: Evershifting/Shroomies
    private IEnumerator GetResourceCoroutine(string resource, Action <ResourceResponse> OnResponse)
    {
        ServerResponce responce = Server.Instance.GetResourceValue(resource);

        yield return(responce);

        UnfoldResourceAnswer(OnResponse, responce, resource);
    }
コード例 #2
0
ファイル: APIs.cs プロジェクト: Evershifting/Shroomies
    private static void UnfoldResourceAnswer(Action <ResourceResponse> OnResponse, ServerResponce responce, string resource = "")
    {
        if (responce.Error)
        {
            if (!string.IsNullOrEmpty(resource))
            {
                Debug.LogErrorFormat("There is no {0}", resource);
            }
            else
            {
                Debug.LogErrorFormat("There is no resource");
            }
        }
        else
        {
            Type type = typeof(ResourceResponse);
            var  deserializedResponse = JsonConvert.DeserializeObject(responce.responce, type);

            if (deserializedResponse is ResourceResponse resourceResponce)
            {
                OnResponse?.Invoke(resourceResponce);
            }
        }
    }
コード例 #3
0
        //Обработка запроса
        private void ProcessRequest(HttpListenerContext context)
        {
            var responce = new ServerResponce();

            try
            {
                //Читаем текст запроса
                var reader         = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding);
                var request_string = reader.ReadToEnd();
                Console.Write(string.Format("\n>>Request: {0}", request_string));

                //Thread.Sleep(10000);

                //Десериализуем поступивший JSON в объект ClientRequest
                var request = JsonConvert.DeserializeObject <ClientRequest>(request_string);

                //Поиск в базе (тип == 1)
                if (request.type == 1)
                {
                    //Cоздаем подключение и составляем запрос в зависимости от полученных параметров
                    var con        = OrganizationDB.CreateAndOpenConnection(database_path);
                    var query      = "SELECT inn, name FROM organization ";
                    var parameters = new Dictionary <string, object>();
                    if (request.inn != -1 && request.name != "")
                    {
                        query += "WHERE inn LIKE @INN AND name LIKE @NAME";
                        parameters["@INN"]  = "%" + request.inn.ToString() + "%";
                        parameters["@NAME"] = "%" + request.name + "%";
                    }
                    else if (request.inn != -1)
                    {
                        query += "WHERE inn LIKE @INN";
                        parameters["@INN"] = "%" + request.inn.ToString() + "%";
                    }
                    else if (request.name != "")
                    {
                        query += "WHERE name LIKE @NAME";
                        parameters["@NAME"] = "%" + request.name + "%";
                    }

                    var db_reader = OrganizationDB.Query(con, database_path, query, parameters);

                    if (!db_reader.HasRows)
                    {
                        responce.response_text = "Не найдено организаций с указанными параметрами";
                    }
                    else
                    {
                        responce.response_text = "Найденные организации:";
                        while (db_reader.Read())
                        {
                            responce.response_text += string.Format("\nИНН: {0}, Название: {1}", db_reader["inn"], db_reader["name"]);
                        }
                    }
                    db_reader.Close();
                    con.Close();
                }
                //Добавление новой организации
                else
                {
                    if (request.inn > 9999999999)
                    {
                        responce.response_text = "Ошибка: ИНН не должен превышать 10 цифр";
                    }
                    else
                    {
                        OrganizationDB.AddOrganization(database_path, request.inn, request.name);
                        responce.response_text = "Организация успешно создана";
                    }
                }
            }
            catch (Exception exc)
            {
                responce.response_text = string.Format("Ошибка на сервере: {0}", exc.Message);
            }
            finally
            {
                //Отправляем ответ
                byte[] b = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(responce));
                context.Response.ContentLength64 = b.Length;
                context.Response.ContentEncoding = Encoding.UTF8;
                context.Response.OutputStream.Write(b, 0, b.Length);
                context.Response.Close();

                lock (current_requests) current_requests.Remove(context);
            }
        }