private IEnumerator GetResourceCoroutine(string resource, Action <ResourceResponse> OnResponse) { ServerResponce responce = Server.Instance.GetResourceValue(resource); yield return(responce); UnfoldResourceAnswer(OnResponse, responce, resource); }
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); } } }
//Обработка запроса 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); } }