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
|
{
|
/// <summary>
|
/// データ要求生成
|
/// </summary>
|
/// <param name="actionType"></param>
|
/// <param name="data"></param>
|
/// <returns></returns>
|
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()
|
};
|
}
|
|
/// <summary>
|
/// TableのgRPCクライアント
|
/// </summary>
|
/// <param name="channel"></param>
|
/// <returns></returns>
|
public static GrpcTableCore.GrpcTableCoreClient CreateTableClient(GrpcChannel channel)
|
{
|
return new GrpcTableCore.GrpcTableCoreClient(channel);
|
}
|
|
public static async Task<GrpcTable> GetTableAsync(GrpcChannel channel, int actionType, string data)
|
{
|
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
|
return await client.GetDataAsync(CreateDataRequest(actionType, data));
|
}
|
|
/// <summary>
|
/// TableのgRPCクライアント
|
/// </summary>
|
/// <param name="client"></param>
|
/// <param name="actionType"></param>
|
/// <param name="data"></param>
|
/// <returns></returns>
|
public static GrpcTable GetTable(GrpcChannel channel, int actionType, string data)
|
{
|
GrpcTableCore.GrpcTableCoreClient client = CreateTableClient(channel);
|
return client.GetData(CreateDataRequest(actionType, data));
|
}
|
|
/// <summary>
|
/// 自由SQL発行
|
/// </summary>
|
/// <param name="client"></param>
|
/// <param name="sql"></param>
|
/// <returns></returns>
|
public static GrpcTable GetTable(GrpcChannel channel, string sql)
|
{
|
return GetTable(channel, (int)ETableActionType.CustomSql, sql);
|
}
|
|
/// <summary>
|
/// 0行、0列の値を返す(同期)
|
/// </summary>
|
/// <param name="channel"></param>
|
/// <param name="sql"></param>
|
/// <returns></returns>
|
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]);
|
}
|
|
/// <summary>
|
/// 0行、0列の値を返す
|
/// </summary>
|
/// <param name="sql"></param>
|
/// <returns></returns>
|
public static async Task<string> 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]);
|
}
|
|
/// <summary>
|
/// データの取得
|
/// </summary>
|
/// <param name="actionType"></param>
|
/// <param name="data"></param>
|
/// <returns></returns>
|
public static async Task<GrpcTable> 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<GrpcTable>())
|
{
|
table = message;
|
break;
|
}
|
}
|
return table;
|
}
|
|
public static async Task<GrpcTable> GetTableStream(GrpcChannel channel, string sql)
|
{
|
return await GetTableStream(channel, (int)ETableActionType.CustomSql, sql);
|
}
|
|
/// <summary>
|
/// データセットのgRPCクライアント
|
/// </summary>
|
/// <param name="channel"></param>
|
/// <returns></returns>
|
public static GrpcSetCore.GrpcSetCoreClient CreateSetClient(GrpcChannel channel)
|
{
|
return new GrpcSetCore.GrpcSetCoreClient(channel);
|
}
|
|
public async static Task<GrpcSet> GetGrpcSet(GrpcChannel channel, int actionType, string data)
|
{
|
GrpcSetCore.GrpcSetCoreClient client = CreateSetClient(channel);
|
return await client.GetDataAsync(CreateDataRequest(actionType, data));
|
}
|
|
/// <summary>
|
/// データセットの取得
|
/// </summary>
|
/// <param name="client"></param>
|
/// <param name="actionType"></param>
|
/// <param name="data"></param>
|
/// <returns></returns>
|
public async static Task<GrpcSet> 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<GrpcSet>())
|
{
|
set = message;
|
break;
|
}
|
}
|
return set;
|
}
|
}
|
}
|