using HotelPms.Data.Common;
using HotelPms.Share.Util;
using Grpc.Core;
using Grpc.Net.Client;
using System;
using System.Threading.Tasks;
namespace HotelPms.Data.Client
{
public class GrpcClient
{
///
/// データ要求生成
///
///
///
///
public static DataRequest CreateDataRequest(int actionType, string data)
{
return new DataRequest
{
ActionType = actionType,
Data = data,
CustomerID = "001",
LoginID = "sa",
Password = "123",
SystemID = 1,
RefTables = string.Empty,
IP = "127.0.0.1",
MachineName = Environment.MachineName,
OS = Environment.OSVersion.ToString()
};
}
///
/// TableのgRPCクライアント
///
///
///
public static GrpcTableCore.GrpcTableCoreClient CreateTableClient(GrpcChannel channel)
{
return new GrpcTableCore.GrpcTableCoreClient(channel);
}
public static async Task GetTableAsync(GrpcChannel channel, int actionType, string data)
{
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
return await client.GetDataAsync(CreateDataRequest(actionType, data));
}
///
/// TableのgRPCクライアント
///
///
///
///
///
public static GrpcTable GetTable(GrpcChannel channel, int actionType, string data)
{
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
return client.GetData(CreateDataRequest(actionType, data));
}
///
/// 自由SQL発行
///
///
///
///
public static GrpcTable GetTable(GrpcChannel channel, string sql)
{
return GetTable(channel, (int)ETableActionType.CustomSql, sql);
}
///
/// 0行、0列の値を返す(同期)
///
///
///
///
public static string ExecuteScalarSync(GrpcChannel channel, string sql)
{
GrpcTable table = GetTable(channel, sql);
if (table.ErrNo != 0) { return string.Empty; }
return CConvert.ToString(table.ToDataTable().Rows[0][0]);
}
///
/// 0行、0列の値を返す
///
///
///
public static async Task ExecuteScalar(GrpcChannel channel, string sql)
{
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
GrpcTable table = await client.GetDataAsync(CreateDataRequest((int)ETableActionType.CustomSql, sql));
if (table.ErrNo != 0) { return string.Empty; }
return CConvert.ToString(table.ToDataTable().Rows[0][0]);
}
///
/// データの取得
///
///
///
///
public static async Task GetTableStream(GrpcChannel channel, int actionType, string data)
{
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
GrpcTable table = null;
using (var call = client.GetDataStream())
{
await call.RequestStream.WriteAsync(CreateDataRequest(actionType, data));
await call.RequestStream.CompleteAsync(); // Finish call and report results
//データの取得
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
table = message;
break;
}
}
return table;
}
public static async Task GetTableStream(GrpcChannel channel, string sql)
{
return await GetTableStream(channel, (int)ETableActionType.CustomSql, sql);
}
///
/// データセットのgRPCクライアント
///
///
///
public static GrpcSetCore.GrpcSetCoreClient CreateSetClient(GrpcChannel channel)
{
return new GrpcSetCore.GrpcSetCoreClient(channel);
}
public async static Task GetGrpcSet(GrpcChannel channel, int actionType, string data)
{
GrpcSetCore.GrpcSetCoreClient client = CreateSetClient(channel);
return await client.GetDataAsync(CreateDataRequest(actionType, data));
}
///
/// データセットの取得
///
///
///
///
///
public async static Task GetDataSet(GrpcChannel channel, int actionType, string data)
{
GrpcSetCore.GrpcSetCoreClient client = CreateSetClient(channel);
GrpcSet set = null;
using (var call = client.GetDataStream())
{
await call.RequestStream.WriteAsync(CreateDataRequest(actionType, data));
await call.RequestStream.CompleteAsync(); // Finish call and report results
//データの取得
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
set = message;
break;
}
}
return set;
}
}
}