A database based on .net
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

// 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();
}
}
}