diff --git a/Hcs.Broker.Mock/Api/MockBillsApi.cs b/Hcs.Broker.Mock/Api/MockBillsApi.cs
new file mode 100644
index 0000000..f89d1a2
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockBillsApi.cs
@@ -0,0 +1,42 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Api.Payload.Bills;
+using Hcs.Service.Async.Bills;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockBillsApi : IBillsApi
+ {
+ ///
+ public async Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs b/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs
new file mode 100644
index 0000000..00c85d4
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockDeviceMeteringApi.cs
@@ -0,0 +1,26 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Api.Payload.DeviceMetering;
+using Hcs.Service.Async.DeviceMetering;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockDeviceMeteringApi : IDeviceMeteringApi
+ {
+ ///
+ public async Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs b/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs
new file mode 100644
index 0000000..e14d6b6
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockHouseManagementApi.cs
@@ -0,0 +1,114 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Api.Payload.HouseManagement;
+using Hcs.Service.Async.HouseManagement;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockHouseManagementApi : IHouseManagementApi
+ {
+ ///
+ public async Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+
+ ///
+ public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+
+ ///
+ public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+
+ ///
+ public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+
+ ///
+ public async Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+
+ ///
+ public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+
+ ///
+ public async Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+
+ ///
+ public async Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+
+ ///
+ public async Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockNsiApi.cs b/Hcs.Broker.Mock/Api/MockNsiApi.cs
new file mode 100644
index 0000000..abe40b2
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockNsiApi.cs
@@ -0,0 +1,17 @@
+using Hcs.Broker.Api;
+using Hcs.Service.Async.Nsi;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockNsiApi : INsiApi
+ {
+ ///
+ public async Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs b/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs
new file mode 100644
index 0000000..8c50ea0
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockNsiCommonApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Broker.Api;
+using Hcs.Service.Async.NsiCommon;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockNsiCommonApi : INsiCommonApi
+ {
+ ///
+ public async Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+
+ ///
+ public async Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return null;
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs b/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs
new file mode 100644
index 0000000..9a21e06
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockOrgRegistryCommonApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Broker.Api;
+using Hcs.Service.Async.OrgRegistryCommon;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockOrgRegistryCommonApi : IOrgRegistryCommonApi
+ {
+ ///
+ public async Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+
+ ///
+ public async Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return [];
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Api/MockPaymentsApi.cs b/Hcs.Broker.Mock/Api/MockPaymentsApi.cs
new file mode 100644
index 0000000..ec581ea
--- /dev/null
+++ b/Hcs.Broker.Mock/Api/MockPaymentsApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Api.Payload.Payments;
+
+namespace Hcs.Broker.Mock.Api
+{
+ ///
+ public class MockPaymentsApi : IPaymentsApi
+ {
+ ///
+ public async Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+
+ ///
+ public async Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return true;
+ }
+ }
+}
diff --git a/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj b/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj
new file mode 100644
index 0000000..6cefae8
--- /dev/null
+++ b/Hcs.Broker.Mock/Hcs.Broker.Mock.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/Hcs.Broker.Mock/MockClient.cs b/Hcs.Broker.Mock/MockClient.cs
new file mode 100644
index 0000000..57b0bed
--- /dev/null
+++ b/Hcs.Broker.Mock/MockClient.cs
@@ -0,0 +1,48 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Logger;
+using Hcs.Broker.MessageCapturer;
+using Hcs.Broker.Mock.Api;
+
+namespace Hcs.Broker.Mock
+{
+ ///
+ public class MockClient : IClient
+ {
+ ///
+ public string OrgPPAGUID { get; set; }
+
+ ///
+ public string ExecutorGUID { get; set; }
+
+ ///
+ public bool UseTunnel { get; set; }
+
+ ///
+ public bool IsPPAK { get; set; }
+
+ ///
+ public OrganizationRole Role { get; set; }
+
+ ///
+ public ILogger Logger { get; set; }
+
+ ///
+ public IMessageCapturer MessageCapturer { get; set; }
+
+ public IBillsApi Bills => new MockBillsApi();
+
+ public IDeviceMeteringApi DeviceMetering => new MockDeviceMeteringApi();
+
+ public IHouseManagementApi HouseManagement => new MockHouseManagementApi();
+
+ public INsiApi Nsi => new MockNsiApi();
+
+ public INsiCommonApi NsiCommon => new MockNsiCommonApi();
+
+ public IOrgRegistryCommonApi OrgRegistryCommon => new MockOrgRegistryCommonApi();
+
+ public IPaymentsApi Payments => new MockPaymentsApi();
+
+ public void SetSigningCertificate(string serialNumber, string? pin = null) { }
+ }
+}
diff --git a/Hcs.Broker/Api/BillsApi.cs b/Hcs.Broker/Api/BillsApi.cs
index fe3f89f..b3504bc 100644
--- a/Hcs.Broker/Api/BillsApi.cs
+++ b/Hcs.Broker/Api/BillsApi.cs
@@ -4,58 +4,31 @@ using Hcs.Service.Async.Bills;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/BillsServiceAsync/
- public class BillsApi(Client client) : ApiBase(client)
+ ///
+ public class BillsApi(Client client) : ApiBase(client), IBillsApi
{
- ///
- /// Экспорт платежных документов
- ///
- /// Идентификатор платежного документа
- /// Токен отмены
- /// Платежные документы
+ ///
public async Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default)
{
var request = new ExportPaymentDocumentDataRequest(client);
return await request.ExecuteByPaymentDocumentIDAsync(paymentDocumentID, token);
}
- ///
- /// Экспорт платежных документов
- ///
- /// Год
- /// Месяц
- /// Глобальный уникальный идентификатор дома по ФИАС
- /// Номер лицевого счета/иной идентификатор плательщика
- /// Токен отмены
- /// Платежные документы
+ ///
public async Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default)
{
var request = new ExportPaymentDocumentDataRequest(client);
return await request.ExecuteByAccountNumberAsync(year, month, fiasHouseGuid, accountNumber, token);
}
- ///
- /// Экспорт платежных документов
- ///
- /// Год
- /// Месяц
- /// Глобальный уникальный идентификатор дома по ФИАС
- /// Номер платежного документа, по которому внесена плата,
- /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы
- /// Токен отмены
- /// Платежные документы
+ ///
public async Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default)
{
var request = new ExportPaymentDocumentDataRequest(client);
return await request.ExecuteByPaymentDocumentNumberAsync(year, month, fiasHouseGuid, paymentDocumentNumber, token);
}
- ///
- /// Импорт сведений о платежных документах
- ///
- /// Пейлоад сведений о платежных документах
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default)
{
var request = new ImportPaymentDocumentDataRequest(client);
diff --git a/Hcs.Broker/Api/DeviceMeteringApi.cs b/Hcs.Broker/Api/DeviceMeteringApi.cs
index f254616..68ce4f2 100644
--- a/Hcs.Broker/Api/DeviceMeteringApi.cs
+++ b/Hcs.Broker/Api/DeviceMeteringApi.cs
@@ -4,27 +4,17 @@ using Hcs.Service.Async.DeviceMetering;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/DeviceMeteringServiceAsync/
- public class DeviceMeteringApi(Client client) : ApiBase(client)
+ ///
+ public class DeviceMeteringApi(Client client) : ApiBase(client), IDeviceMeteringApi
{
- ///
- /// Экспорт истории показаний и поверок приборов учета пользователя, установленных в указанном доме
- ///
- /// Пейлоад выборки ПУ
- /// Токен отмены
- /// Лицевые счета
+ ///
public async Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default)
{
var request = new ExportMeteringDeviceHistoryRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт показаний приборов учета
- ///
- /// Показания прибора учета
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default)
{
var request = new ImportMeteringDeviceValuesRequest(client);
diff --git a/Hcs.Broker/Api/HouseManagementApi.cs b/Hcs.Broker/Api/HouseManagementApi.cs
index 51510ed..8af1869 100644
--- a/Hcs.Broker/Api/HouseManagementApi.cs
+++ b/Hcs.Broker/Api/HouseManagementApi.cs
@@ -4,158 +4,94 @@ using Hcs.Service.Async.HouseManagement;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/HouseManagementServiceAsync/
- public class HouseManagementApi(Client client) : ApiBase(client)
+ ///
+ public class HouseManagementApi(Client client) : ApiBase(client), IHouseManagementApi
{
- ///
- /// Экспорт лицевых счетов
- ///
- /// Глобальный уникальный идентификатор дома по ФИАС
- /// Токен отмены
- /// Лицевые счета
+ ///
public async Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default)
{
var request = new ExportAccountRequest(client);
return await request.ExecuteAsync(fiasHouseGuid, token);
}
- ///
- /// Возвращает информацию о доме
- ///
- /// Глобальный уникальный идентификатор дома по ФИАС
- /// Токен отмены
- /// Информация о доме
+ ///
public async Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default)
{
var request = new ExportHouseRequest(client);
return await request.ExecuteAsync(fiasHouseGuid, token);
}
- ///
- /// Возвращает все договора ресурсоснабжения
- ///
- /// Токен отмены
- /// Договора ресурсоснабжения
+ ///
public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default)
{
var request = new ExportSupplyResourceContractDataRequest(client);
return await request.ExecuteAsync(token);
}
- ///
- /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ
- ///
- /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
- /// Токен отмены
- /// Договор ресурсоснабжения
+ ///
public async Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default)
{
var request = new ExportSupplyResourceContractDataRequest(client);
return await request.ExecuteAsync(contractRootGuid, token);
}
- ///
- /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ
- ///
- /// Номер договора ресурсоснабжения в ГИС ЖКХ
- /// Токен отмены
- /// Договор ресурсоснабжения
+ ///
public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default)
{
var request = new ExportSupplyResourceContractDataRequest(client);
return await request.ExecuteAsync(contractNumber, token);
}
- ///
- /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору
- ///
- /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
- /// Токен отмены
- /// Объекты жилищного фонда
+ ///
public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default)
{
var request = new ExportSupplyResourceContractObjectAddressDataRequest(client);
return await request.ExecuteAsync(contractRootGuid, token);
}
- ///
- /// Импорт лицевого счета
- ///
- /// Пейлоад лицевого счета
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default)
{
var request = new ImportAccountDataRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт сведений о ДУ (создание ДУ)
- ///
- /// Пейлоад ДУ
- /// Токен отмены
- /// Импортированный договор
+ ///
public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default)
{
var request = new ImportContractDataRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт данных дома
- ///
- /// Пейлоад данных дома
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default)
{
var request = new ImportHouseUODataRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт прибора учета
- ///
- /// Прибор учета
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default)
{
var request = new ImportMeteringDeviceDataRequest(client);
return await request.ExecuteAsync(meteringDevice, token);
}
- ///
- /// Импорт новости для информирования граждан
- ///
- /// Пейлоад новости
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default)
{
var request = new ImportNotificationDataRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт договора ресурсоснабжения с РСО
- ///
- /// Пейлоад договора ресурсоснабжения
- /// Токен отмены
- /// Импортированный договор
+ ///
public async Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default)
{
var request = new ImportSupplyResourceContractDataRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт проекта договора ресурсоснабжения с РСО
- ///
- /// Пейлоад проекта договора ресурсоснабжения
- /// Токен отмены
- /// Импортированный проект договора
+ ///
public async Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default)
{
var request = new ImportSupplyResourceContractProjectRequest(client);
diff --git a/Hcs.Broker/Api/IBillsApi.cs b/Hcs.Broker/Api/IBillsApi.cs
new file mode 100644
index 0000000..6961236
--- /dev/null
+++ b/Hcs.Broker/Api/IBillsApi.cs
@@ -0,0 +1,48 @@
+using Hcs.Broker.Api.Payload.Bills;
+using Hcs.Service.Async.Bills;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/BillsServiceAsync/
+ public interface IBillsApi
+ {
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Идентификатор платежного документа
+ /// Токен отмены
+ /// Платежные документы
+ Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default);
+
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Год
+ /// Месяц
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Номер лицевого счета/иной идентификатор плательщика
+ /// Токен отмены
+ /// Платежные документы
+ Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default);
+
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Год
+ /// Месяц
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Номер платежного документа, по которому внесена плата,
+ /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы
+ /// Токен отмены
+ /// Платежные документы
+ Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default);
+
+ ///
+ /// Импорт сведений о платежных документах
+ ///
+ /// Пейлоад сведений о платежных документах
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/IDeviceMeteringApi.cs b/Hcs.Broker/Api/IDeviceMeteringApi.cs
new file mode 100644
index 0000000..d84e4ad
--- /dev/null
+++ b/Hcs.Broker/Api/IDeviceMeteringApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Broker.Api.Payload.DeviceMetering;
+using Hcs.Service.Async.DeviceMetering;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/DeviceMeteringServiceAsync/
+ public interface IDeviceMeteringApi
+ {
+ ///
+ /// Экспорт истории показаний и поверок приборов учета пользователя, установленных в указанном доме
+ ///
+ /// Пейлоад выборки ПУ
+ /// Токен отмены
+ /// Лицевые счета
+ Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт показаний приборов учета
+ ///
+ /// Показания прибора учета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/IHouseManagementApi.cs b/Hcs.Broker/Api/IHouseManagementApi.cs
new file mode 100644
index 0000000..31652ce
--- /dev/null
+++ b/Hcs.Broker/Api/IHouseManagementApi.cs
@@ -0,0 +1,112 @@
+using Hcs.Broker.Api.Payload.HouseManagement;
+using Hcs.Service.Async.HouseManagement;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/HouseManagementServiceAsync/
+ public interface IHouseManagementApi
+ {
+ ///
+ /// Экспорт лицевых счетов
+ ///
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Токен отмены
+ /// Лицевые счета
+ Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default);
+
+ ///
+ /// Возвращает информацию о доме
+ ///
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Токен отмены
+ /// Информация о доме
+ Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default);
+
+ ///
+ /// Возвращает все договора ресурсоснабжения
+ ///
+ /// Токен отмены
+ /// Договора ресурсоснабжения
+ Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default);
+
+ ///
+ /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ
+ ///
+ /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Договор ресурсоснабжения
+ Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default);
+
+ ///
+ /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ
+ ///
+ /// Номер договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Договор ресурсоснабжения
+ Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default);
+
+ ///
+ /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору
+ ///
+ /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Объекты жилищного фонда
+ Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default);
+
+ ///
+ /// Импорт лицевого счета
+ ///
+ /// Пейлоад лицевого счета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт сведений о ДУ (создание ДУ)
+ ///
+ /// Пейлоад ДУ
+ /// Токен отмены
+ /// Импортированный договор
+ Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт данных дома
+ ///
+ /// Пейлоад данных дома
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт прибора учета
+ ///
+ /// Прибор учета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default);
+
+ ///
+ /// Импорт новости для информирования граждан
+ ///
+ /// Пейлоад новости
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт договора ресурсоснабжения с РСО
+ ///
+ /// Пейлоад договора ресурсоснабжения
+ /// Токен отмены
+ /// Импортированный договор
+ Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт проекта договора ресурсоснабжения с РСО
+ ///
+ /// Пейлоад проекта договора ресурсоснабжения
+ /// Токен отмены
+ /// Импортированный проект договора
+ Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/INsiApi.cs b/Hcs.Broker/Api/INsiApi.cs
new file mode 100644
index 0000000..14c8169
--- /dev/null
+++ b/Hcs.Broker/Api/INsiApi.cs
@@ -0,0 +1,16 @@
+using Hcs.Service.Async.Nsi;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/NsiService/
+ public interface INsiApi
+ {
+ ///
+ /// Возвращает данные справочника поставщика информации
+ ///
+ /// Реестровый номер справочника
+ /// Токен отмены
+ /// Данные справочника
+ Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/INsiCommonApi.cs b/Hcs.Broker/Api/INsiCommonApi.cs
new file mode 100644
index 0000000..942420f
--- /dev/null
+++ b/Hcs.Broker/Api/INsiCommonApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Service.Async.NsiCommon;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/NsiCommonService/
+ public interface INsiCommonApi
+ {
+ ///
+ /// Возвращает данные общесистемного справочника
+ ///
+ /// Реестровый номер справочника
+ /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
+ /// Токен отмены
+ /// Данные общесистемного справочника
+ Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default);
+
+ ///
+ /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них
+ ///
+ /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
+ /// Токен отмены
+ /// Перечень общесистемных справочников
+ Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/IOrgRegistryCommonApi.cs b/Hcs.Broker/Api/IOrgRegistryCommonApi.cs
new file mode 100644
index 0000000..16a907e
--- /dev/null
+++ b/Hcs.Broker/Api/IOrgRegistryCommonApi.cs
@@ -0,0 +1,25 @@
+using Hcs.Service.Async.OrgRegistryCommon;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/OrganizationsRegistryCommonAsyncService/
+ public interface IOrgRegistryCommonApi
+ {
+ ///
+ /// Экспорт сведений о поставщиках информации ИС
+ ///
+ /// Выгрузить только активных поставщиков данных
+ /// Токен отмены
+ /// Сведения о поставщиках данных
+ Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default);
+
+ ///
+ /// Экспорт сведений из реестра организаций
+ ///
+ /// ОГРН
+ /// КПП
+ /// Токен отмены
+ /// Сведения из реестра организаций
+ Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/IPaymentsApi.cs b/Hcs.Broker/Api/IPaymentsApi.cs
new file mode 100644
index 0000000..5b2fa9f
--- /dev/null
+++ b/Hcs.Broker/Api/IPaymentsApi.cs
@@ -0,0 +1,24 @@
+using Hcs.Broker.Api.Payload.Payments;
+
+namespace Hcs.Broker.Api
+{
+ // http://open-gkh.ru/PaymentsServiceAsync/
+ public interface IPaymentsApi
+ {
+ ///
+ /// ВИ_ОПЛАТА_ИЗВ. Передать перечень документов "Извещение о принятии к исполнению распоряжения".
+ ///
+ /// Пейлоад документа
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default);
+
+ ///
+ /// Импорт пакета документов "Извещение о принятии к исполнению распоряжения", размещаемых исполнителем
+ ///
+ /// Пейлоад документа
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default);
+ }
+}
diff --git a/Hcs.Broker/Api/NsiApi.cs b/Hcs.Broker/Api/NsiApi.cs
index 38adde4..c0372e7 100644
--- a/Hcs.Broker/Api/NsiApi.cs
+++ b/Hcs.Broker/Api/NsiApi.cs
@@ -4,15 +4,10 @@ using Hcs.Service.Async.Nsi;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/NsiService/
- public class NsiApi(Client client) : ApiBase(client)
+ ///
+ public class NsiApi(Client client) : ApiBase(client), INsiApi
{
- ///
- /// Возвращает данные справочника поставщика информации
- ///
- /// Реестровый номер справочника
- /// Токен отмены
- /// Данные справочника
+ ///
public async Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
{
try
diff --git a/Hcs.Broker/Api/NsiCommonApi.cs b/Hcs.Broker/Api/NsiCommonApi.cs
index 9467e1c..10178c2 100644
--- a/Hcs.Broker/Api/NsiCommonApi.cs
+++ b/Hcs.Broker/Api/NsiCommonApi.cs
@@ -4,16 +4,10 @@ using Hcs.Service.Async.NsiCommon;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/NsiCommonService/
- public class NsiCommonApi(Client client) : ApiBase(client)
+ ///
+ public class NsiCommonApi(Client client) : ApiBase(client), INsiCommonApi
{
- ///
- /// Возвращает данные общесистемного справочника
- ///
- /// Реестровый номер справочника
- /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
- /// Токен отмены
- /// Данные общесистемного справочника
+ ///
public async Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default)
{
try
@@ -27,12 +21,7 @@ namespace Hcs.Broker.Api
}
}
- ///
- /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них
- ///
- /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
- /// Токен отмены
- /// Перечень общесистемных справочников
+ ///
public async Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default)
{
try
diff --git a/Hcs.Broker/Api/OrgRegistryCommonApi.cs b/Hcs.Broker/Api/OrgRegistryCommonApi.cs
index cb90011..313b542 100644
--- a/Hcs.Broker/Api/OrgRegistryCommonApi.cs
+++ b/Hcs.Broker/Api/OrgRegistryCommonApi.cs
@@ -4,15 +4,10 @@ using Hcs.Service.Async.OrgRegistryCommon;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/OrganizationsRegistryCommonAsyncService/
- public class OrgRegistryCommonApi(Client client) : ApiBase(client)
+ ///
+ public class OrgRegistryCommonApi(Client client) : ApiBase(client), IOrgRegistryCommonApi
{
- ///
- /// Экспорт сведений о поставщиках информации ИС
- ///
- /// Выгрузить только активных поставщиков данных
- /// Токен отмены
- /// Сведения о поставщиках данных
+ ///
public async Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default)
{
try
@@ -26,13 +21,7 @@ namespace Hcs.Broker.Api
}
}
- ///
- /// Экспорт сведений из реестра организаций
- ///
- /// ОГРН
- /// КПП
- /// Токен отмены
- /// Сведения из реестра организаций
+ ///
public async Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default)
{
try
diff --git a/Hcs.Broker/Api/PaymentsApi.cs b/Hcs.Broker/Api/PaymentsApi.cs
index ca3be31..74b6902 100644
--- a/Hcs.Broker/Api/PaymentsApi.cs
+++ b/Hcs.Broker/Api/PaymentsApi.cs
@@ -3,27 +3,17 @@ using Hcs.Broker.Api.Request.Payments;
namespace Hcs.Broker.Api
{
- // http://open-gkh.ru/PaymentsServiceAsync/
- public class PaymentsApi(Client client) : ApiBase(client)
+ ///
+ public class PaymentsApi(Client client) : ApiBase(client), IPaymentsApi
{
- ///
- /// ВИ_ОПЛАТА_ИЗВ. Передать перечень документов "Извещение о принятии к исполнению распоряжения".
- ///
- /// Пейлоад документа
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
{
var request = new ImportNotificationsOfOrderExecutionRequest(client);
return await request.ExecuteAsync(payload, token);
}
- ///
- /// Импорт пакета документов "Извещение о принятии к исполнению распоряжения", размещаемых исполнителем
- ///
- /// Пейлоад документа
- /// Токен отмены
- /// true, если операция выполнена успешно, иначе - false
+ ///
public async Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
{
var request = new ImportSupplierNotificationsOfOrderExecutionRequest(client);
diff --git a/Hcs.Broker/Client.cs b/Hcs.Broker/Client.cs
index b17412e..27a0be1 100644
--- a/Hcs.Broker/Client.cs
+++ b/Hcs.Broker/Client.cs
@@ -8,60 +8,43 @@ using System.Security.Cryptography.X509Certificates;
namespace Hcs.Broker
{
- ///
- /// Клиент для вызова всех реализованных функций интеграции с ГИС ЖКХ
- ///
- public class Client
+ ///
+ public class Client : IClient
{
- ///
- /// Идентификатор поставщика данных ГИС ЖКХ
- ///
+ ///
public string OrgPPAGUID { get; set; }
- ///
- /// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы
- ///
+ ///
public string ExecutorGUID { get; set; }
- ///
- /// Признак, указывающий на то, что используется ли внешний туннель (stunnel)
- ///
+ ///
public bool UseTunnel { get; set; }
- ///
- /// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом
- ///
+ ///
public bool IsPPAK { get; set; }
- ///
- /// Роль
- ///
+ ///
public OrganizationRole Role { get; set; }
- ///
- /// Устанавливаемый пользователем приемник отладочных сообщений
- ///
+ ///
public ILogger Logger { get; set; }
- ///
- /// Устанавливаемый пользователем механизм перехвата содержимого отправляемых
- /// и принимаемых пакетов
- ///
+ ///
public IMessageCapturer MessageCapturer { get; set; }
- public BillsApi Bills => new(this);
+ public IBillsApi Bills => new BillsApi(this);
- public DeviceMeteringApi DeviceMetering => new(this);
+ public IDeviceMeteringApi DeviceMetering => new DeviceMeteringApi(this);
- public HouseManagementApi HouseManagement => new(this);
+ public IHouseManagementApi HouseManagement => new HouseManagementApi(this);
- public NsiApi Nsi => new(this);
+ public INsiApi Nsi => new NsiApi(this);
- public NsiCommonApi NsiCommon => new(this);
+ public INsiCommonApi NsiCommon => new NsiCommonApi(this);
- public OrgRegistryCommonApi OrgRegistryCommon => new(this);
+ public IOrgRegistryCommonApi OrgRegistryCommon => new OrgRegistryCommonApi(this);
- public PaymentsApi Payments => new(this);
+ public IPaymentsApi Payments => new PaymentsApi(this);
///
/// Сертификат клиента для применения при формировании запросов
diff --git a/Hcs.Broker/IClient.cs b/Hcs.Broker/IClient.cs
new file mode 100644
index 0000000..a860177
--- /dev/null
+++ b/Hcs.Broker/IClient.cs
@@ -0,0 +1,64 @@
+using Hcs.Broker.Api;
+using Hcs.Broker.Logger;
+using Hcs.Broker.MessageCapturer;
+
+namespace Hcs.Broker
+{
+ ///
+ /// Клиент для вызова всех реализованных функций интеграции с ГИС ЖКХ
+ ///
+ public interface IClient
+ {
+ ///
+ /// Идентификатор поставщика данных ГИС ЖКХ
+ ///
+ string OrgPPAGUID { get; set; }
+
+ ///
+ /// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы
+ ///
+ string ExecutorGUID { get; set; }
+
+ ///
+ /// Признак, указывающий на то, что используется ли внешний туннель (stunnel)
+ ///
+ bool UseTunnel { get; set; }
+
+ ///
+ /// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом
+ ///
+ bool IsPPAK { get; set; }
+
+ ///
+ /// Роль
+ ///
+ OrganizationRole Role { get; set; }
+
+ ///
+ /// Устанавливаемый пользователем приемник отладочных сообщений
+ ///
+ ILogger Logger { get; set; }
+
+ ///
+ /// Устанавливаемый пользователем механизм перехвата содержимого отправляемых
+ /// и принимаемых пакетов
+ ///
+ IMessageCapturer MessageCapturer { get; set; }
+
+ IBillsApi Bills { get; }
+
+ IDeviceMeteringApi DeviceMetering { get; }
+
+ IHouseManagementApi HouseManagement { get; }
+
+ INsiApi Nsi { get; }
+
+ INsiCommonApi NsiCommon { get; }
+
+ IOrgRegistryCommonApi OrgRegistryCommon { get; }
+
+ IPaymentsApi Payments { get; }
+
+ void SetSigningCertificate(string serialNumber, string? pin = null);
+ }
+}
diff --git a/Hcs.WebApp/Components/Pages/Test/Export.razor b/Hcs.WebApp/Components/Pages/Test/Export.razor
index 2f4019e..d383f7b 100644
--- a/Hcs.WebApp/Components/Pages/Test/Export.razor
+++ b/Hcs.WebApp/Components/Pages/Test/Export.razor
@@ -5,6 +5,7 @@
@using Hcs.Broker.MessageCapturer
@using Hcs.Service.Async.Nsi
@using Hcs.WebApp.Config
+@using Hcs.WebApp.Services
@using Hcs.WebApp.Utils
@using Microsoft.AspNetCore.Authorization
@@ -14,6 +15,7 @@
@inject NavigationManager NavigationManager
@inject IConfiguration Configuration
+@inject IClientProvider ClientProvider
Тестирование экспорта
@@ -59,7 +61,7 @@
string messageBody;
string responseBody;
- Client client;
+ IClient client;
ActionLogger logger = new ActionLogger();
FileMessageCapturer messageCapturer;
bool catchMessageBody;
@@ -73,19 +75,8 @@
messageCapturer = new FileMessageCapturer("test/export", logger);
messageCapturer.OnFileWritten += OnFileWritten;
- var brokerConfig = Configuration.GetSection("BrokerConfig").Get();
- client = new Client
- {
- OrgPPAGUID = brokerConfig.OrgPPAGUID,
- ExecutorGUID = brokerConfig.ExecutorGUID,
- UseTunnel = false,
- IsPPAK = false,
- Role = OrganizationRole.RSO,
- Logger = logger,
- MessageCapturer = messageCapturer
- };
-
- client.SetSigningCertificate(brokerConfig.CertificateSerialNumber);
+ var config = Configuration.GetSection("BrokerConfig").Get();
+ client = ClientProvider.CreateClient(config, logger, messageCapturer);
}
public void Dispose()
diff --git a/Hcs.WebApp/Hcs.WebApp.csproj b/Hcs.WebApp/Hcs.WebApp.csproj
index c063d08..3ae1000 100644
--- a/Hcs.WebApp/Hcs.WebApp.csproj
+++ b/Hcs.WebApp/Hcs.WebApp.csproj
@@ -6,6 +6,10 @@
enable
+
+ $(DefineConstants);USE_MOCK
+
+
@@ -25,6 +29,7 @@
+
diff --git a/Hcs.WebApp/Program.cs b/Hcs.WebApp/Program.cs
index 78de197..513086e 100644
--- a/Hcs.WebApp/Program.cs
+++ b/Hcs.WebApp/Program.cs
@@ -1,5 +1,6 @@
using Hcs.WebApp.Components;
using Hcs.WebApp.Data;
+using Hcs.WebApp.Services;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Radzen;
@@ -34,6 +35,12 @@ builder.Services
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
+#if USE_MOCK
+builder.Services.AddTransient();
+#else
+builder.Services.AddTransient();
+#endif
+
var app = builder.Build();
if (!app.Environment.IsDevelopment())
diff --git a/Hcs.WebApp/Services/ClientProvider.cs b/Hcs.WebApp/Services/ClientProvider.cs
new file mode 100644
index 0000000..d9010f1
--- /dev/null
+++ b/Hcs.WebApp/Services/ClientProvider.cs
@@ -0,0 +1,27 @@
+using Hcs.Broker;
+using Hcs.Broker.MessageCapturer;
+using Hcs.WebApp.Config;
+
+namespace Hcs.WebApp.Services
+{
+ public class ClientProvider : IClientProvider
+ {
+ public IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer)
+ {
+ var client = new Client
+ {
+ OrgPPAGUID = config.OrgPPAGUID,
+ ExecutorGUID = config.ExecutorGUID,
+ UseTunnel = false,
+ IsPPAK = false,
+ Role = OrganizationRole.RSO,
+ Logger = logger,
+ MessageCapturer = messageCapturer
+ };
+
+ client.SetSigningCertificate(config.CertificateSerialNumber);
+
+ return client;
+ }
+ }
+}
diff --git a/Hcs.WebApp/Services/IClientProvider.cs b/Hcs.WebApp/Services/IClientProvider.cs
new file mode 100644
index 0000000..3388fc7
--- /dev/null
+++ b/Hcs.WebApp/Services/IClientProvider.cs
@@ -0,0 +1,11 @@
+using Hcs.Broker;
+using Hcs.Broker.MessageCapturer;
+using Hcs.WebApp.Config;
+
+namespace Hcs.WebApp.Services
+{
+ public interface IClientProvider
+ {
+ IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer);
+ }
+}
diff --git a/Hcs.WebApp/Services/MockClientProvider.cs b/Hcs.WebApp/Services/MockClientProvider.cs
new file mode 100644
index 0000000..be2e75f
--- /dev/null
+++ b/Hcs.WebApp/Services/MockClientProvider.cs
@@ -0,0 +1,19 @@
+using Hcs.Broker;
+using Hcs.Broker.MessageCapturer;
+using Hcs.Broker.Mock;
+using Hcs.WebApp.Config;
+
+namespace Hcs.WebApp.Services
+{
+ public class MockClientProvider : IClientProvider
+ {
+ public IClient CreateClient(BrokerConfig config, Broker.Logger.ILogger logger, IMessageCapturer messageCapturer)
+ {
+#if USE_MOCK
+ return new MockClient();
+#else
+ return null;
+#endif
+ }
+ }
+}
diff --git a/Hcs.sln b/Hcs.sln
index 6cabb44..80b40ae 100644
--- a/Hcs.sln
+++ b/Hcs.sln
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.WebApp", "Hcs.WebApp\Hc
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.Broker", "Hcs.Broker\Hcs.Broker.csproj", "{F1A3A447-79C9-4387-88AF-981F5BC3BA88}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hcs.Broker.Mock", "Hcs.Broker.Mock\Hcs.Broker.Mock.csproj", "{D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -33,6 +35,9 @@ Global
{F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1A3A447-79C9-4387-88AF-981F5BC3BA88}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D28CCA2E-10F1-411E-A103-F6BCB4D1BCAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE