You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
// Author: Gockner, Simon
|
|
// Created: 2020-02-10
|
|
// Copyright(c) 2020 SimonG. All Rights Reserved.
|
|
|
|
using System.ServiceModel;
|
|
using System.Threading.Tasks;
|
|
using GBase.Api.Services;
|
|
using GBase.Client.Interfaces;
|
|
|
|
namespace GBase.Client
|
|
{
|
|
public class GBaseClient : IGBaseClient //TODO: Add logging?
|
|
{
|
|
public GBaseClient(IGBaseClientSettings settings)
|
|
{
|
|
GBaseServiceFactory = OpenFactory<IGBaseService>(settings.ServerProtocolGBaseEndpointAddress);
|
|
GBaseTableServiceFactory = OpenFactory<IGBaseTableService>(settings.ServerProtocolGBaseTableEndpointAddress);
|
|
GBaseEntryServiceFactory = OpenFactory<IGBaseEntryService>(settings.ServerProtocolGBaseEntryEndpointAddress);
|
|
}
|
|
|
|
private ChannelFactory<IGBaseService> GBaseServiceFactory { get; set; }
|
|
private ChannelFactory<IGBaseTableService> GBaseTableServiceFactory { get; set; }
|
|
private ChannelFactory<IGBaseEntryService> GBaseEntryServiceFactory { get; set; }
|
|
|
|
|
|
public bool AddTable() //TODO: Implement this function correctly
|
|
{
|
|
IGBaseService channel = OpenChannel(GBaseServiceFactory);
|
|
bool success = channel.AddTable();
|
|
|
|
CloseChannel(channel);
|
|
|
|
return success;
|
|
}
|
|
|
|
public bool RemoveTable() //TODO: Implement this function correctly
|
|
{
|
|
IGBaseService channel = OpenChannel(GBaseServiceFactory);
|
|
bool success = channel.RemoveTable();
|
|
|
|
CloseChannel(channel);
|
|
|
|
return success;
|
|
}
|
|
|
|
private ChannelFactory<TService> OpenFactory<TService>(string endpoint)
|
|
{
|
|
ChannelFactory<TService> factory = new ChannelFactory<TService>(new BasicHttpBinding(), new EndpointAddress(endpoint));
|
|
factory.Open();
|
|
|
|
return factory;
|
|
}
|
|
|
|
private TService OpenChannel<TService>(ChannelFactory<TService> factory)
|
|
{
|
|
TService channel = factory.CreateChannel();
|
|
((IClientChannel) channel).Open();
|
|
|
|
return channel;
|
|
}
|
|
|
|
private void CloseChannel<TService>(TService service)
|
|
{
|
|
((IClientChannel) service).Close();
|
|
}
|
|
|
|
public async ValueTask DisposeAsync()
|
|
{
|
|
GBaseServiceFactory.Close();
|
|
GBaseTableServiceFactory.Close();
|
|
GBaseEntryServiceFactory.Close();
|
|
}
|
|
}
|
|
} |