ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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;
        }
    }
}