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; } } }