XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFE各类拓展/XCCNetWork.cs
+254
-56
XFEstudio/XFEExtension
XCC网络通讯现在分为明文和文件两个服务器分别传输
8b3e5c4
代码差异
1 个文件
+254
-56
@@ -38,6 +38,20 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
38
38
public EventHandler<XCCConnectedEventArgs> connected;
39
39
}
40
40
/// <summary>
41
/// XCC客户端连接类型
42
/// </summary>
43
public enum XCCClientType
44
{
45
/// <summary>
46
/// 明文类型
47
/// </summary>
48
TextMessageClient,
49
/// <summary>
50
/// 文件类型
51
/// </summary>
52
FileTransportClient
53
}
54
/// <summary>
41
55
/// XCC网络通讯
42
56
/// </summary>
43
57
public class XCCNetWork
@@ -156,9 +170,13 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
156
170
/// </summary>
157
171
public string Sender { get; }
158
172
/// <summary>
159
/// WebSocket客户端
173
/// WebSocket明文传输客户端
174
/// </summary>
175
public ClientWebSocket TextMessageClientWebSocket { get; private set; }
176
/// <summary>
177
/// WebSocket文件传输客户端
160
178
/// </summary>
161
public ClientWebSocket ClientWebSocket { get; private set; }
179
public ClientWebSocket FileTransportClientWebSocket { get; private set; }
162
180
/// <summary>
163
181
/// 是否已连接
164
182
/// </summary>
@@ -173,24 +191,169 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
173
191
/// <param name="reconnectTryDelay">重连尝试延迟</param>
174
192
/// <returns></returns>
175
193
public async Task StartXCC(bool autoReconnect = true, int reconnectMaxTimes = -1, int reconnectTryDelay = 100)
194
{
195
var textMessageXCCTask = StartTextMessageXCC(autoReconnect, reconnectMaxTimes, reconnectTryDelay);
196
var fileTransportXCCTask = StartFileTransportXCC(autoReconnect, reconnectMaxTimes, reconnectTryDelay);
197
await Task.WhenAll(textMessageXCCTask, fileTransportXCCTask);
198
}
199
/// <summary>
200
/// 启动XCC文本会话
201
/// </summary>
202
/// <param name="autoReconnect">是否自动重连</param>
203
/// <param name="reconnectMaxTimes">最大重连次数,-1则为无限次</param>
204
/// <param name="reconnectTryDelay">重连尝试延迟</param>
205
/// <returns></returns>
206
public async Task StartTextMessageXCC(bool autoReconnect = true, int reconnectMaxTimes = -1, int reconnectTryDelay = 100)
207
{
208
XCCReconnect:
209
TextMessageClientWebSocket = new ClientWebSocket();
210
Uri serverUri = new Uri("ws://xcc.api.xfegzs.com");
211
var base64GroupId = Convert.ToBase64String(Encoding.UTF8.GetBytes(GroupId));
212
var base64SenderId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Sender));
213
TextMessageClientWebSocket.Options.SetRequestHeader("Group", base64GroupId);
214
TextMessageClientWebSocket.Options.SetRequestHeader("Sender", base64SenderId);
215
TextMessageClientWebSocket.Options.SetRequestHeader("Type", "Text");
216
reconnectTimes++;
217
try
218
{
219
if (TextMessageClientWebSocket.State != WebSocketState.Open)
220
await TextMessageClientWebSocket.ConnectAsync(serverUri, CancellationToken.None);
221
}
222
catch (Exception ex)
223
{
224
if (IsConnected == true)
225
{
226
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.TextMessageClient, TextMessageClientWebSocket, FileTransportClientWebSocket, false));
227
}
228
IsConnected = false;
229
if (autoReconnect)
230
{
231
if (reconnectTimes <= reconnectMaxTimes || reconnectMaxTimes == -1)
232
{
233
Thread.Sleep(reconnectTryDelay);
234
goto XCCReconnect;
235
}
236
}
237
else
238
{
239
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.TextMessageClient, null, null, new XFECyberCommException("与XCC网络通讯明文服务器建立连接时发生异常", ex)));
240
return;
241
}
242
}
243
reconnectTimes = 0;
244
workBase.connected?.Invoke(this, new XCCConnectedEventArgsImpl(this, XCCClientType.TextMessageClient, TextMessageClientWebSocket, FileTransportClientWebSocket));
245
IsConnected = true;
246
while (TextMessageClientWebSocket.State == WebSocketState.Open)
247
{
248
try
249
{
250
byte[] receiveBuffer = new byte[1024];
251
WebSocketReceiveResult receiveResult = await TextMessageClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
252
var bufferList = new List<byte>();
253
bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
254
//ReceiveCompletedMessageByUsingWhile
255
while (!receiveResult.EndOfMessage)
256
{
257
receiveResult = await TextMessageClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
258
bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
259
}
260
var receivedBinaryBuffer = bufferList.ToArray();
261
if (receiveResult.MessageType == WebSocketMessageType.Text)
262
{
263
try
264
{
265
var receivedMessage = Encoding.UTF8.GetString(receivedBinaryBuffer);
266
var isHistory = receivedMessage.IndexOf("[XCCGetHistory]") == 0;
267
if (isHistory)
268
{
269
receivedMessage = receivedMessage.Substring(15);
270
}
271
var unPackedMessage = receivedMessage.ToXFEArray<string>();
272
var messageId = unPackedMessage[0];
273
var signature = unPackedMessage[1];
274
var message = unPackedMessage[2];
275
var senderName = unPackedMessage[3];
276
var sendTime = DateTime.Parse(unPackedMessage[4]);
277
var messageType = XCCTextMessageType.Text;
278
switch (signature)
279
{
280
case "[XCCTextMessage]":
281
messageType = XCCTextMessageType.Text;
282
break;
283
case "[XCCImage]":
284
messageType = XCCTextMessageType.Image;
285
break;
286
case "[XCCAudio]":
287
messageType = XCCTextMessageType.Audio;
288
break;
289
case "[XCCVideo]":
290
messageType = XCCTextMessageType.Video;
291
break;
292
default:
293
break;
294
}
295
workBase.textMessageReceived?.Invoke(this, new XCCTextMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.TextMessageClient, messageId, messageType, message, senderName, sendTime, isHistory));
296
}
297
catch (Exception ex)
298
{
299
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.TextMessageClient, null, null, new XFECyberCommException("接收XCC服务器消息时发生异常", ex)));
300
}
301
}
302
}
303
catch (Exception ex)
304
{
305
try { await TextMessageClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close", CancellationToken.None); } catch { }
306
if (IsConnected == true)
307
{
308
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.TextMessageClient, TextMessageClientWebSocket, FileTransportClientWebSocket, false));
309
}
310
IsConnected = false;
311
if (autoReconnect)
312
{
313
if (autoReconnect)
314
{
315
Thread.Sleep(reconnectTryDelay);
316
if (reconnectTimes <= reconnectMaxTimes || reconnectMaxTimes == -1)
317
goto XCCReconnect;
318
}
319
}
320
else
321
{
322
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.TextMessageClient, null, null, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
323
return;
324
}
325
}
326
}
327
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.TextMessageClient, TextMessageClientWebSocket, FileTransportClientWebSocket, true));
328
}
329
/// <summary>
330
/// 启动XCC文件传输会话
331
/// </summary>
332
/// <param name="autoReconnect">是否自动重连</param>
333
/// <param name="reconnectMaxTimes">最大重连次数,-1则为无限次</param>
334
/// <param name="reconnectTryDelay">重连尝试延迟</param>
335
/// <returns></returns>
336
public async Task StartFileTransportXCC(bool autoReconnect = true, int reconnectMaxTimes = -1, int reconnectTryDelay = 100)
176
337
{
177
338
XCCReconnect:
178
ClientWebSocket = new ClientWebSocket();
339
FileTransportClientWebSocket = new ClientWebSocket();
179
340
Uri serverUri = new Uri("ws://xcc.api.xfegzs.com");
180
341
var base64GroupId = Convert.ToBase64String(Encoding.UTF8.GetBytes(GroupId));
181
342
var base64SenderId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Sender));
182
ClientWebSocket.Options.SetRequestHeader("Group", base64GroupId);
183
ClientWebSocket.Options.SetRequestHeader("Sender", base64SenderId);
343
FileTransportClientWebSocket.Options.SetRequestHeader("Group", base64GroupId);
344
FileTransportClientWebSocket.Options.SetRequestHeader("Sender", base64SenderId);
345
FileTransportClientWebSocket.Options.SetRequestHeader("Type", "File");
184
346
reconnectTimes++;
185
347
try
186
348
{
187
await ClientWebSocket.ConnectAsync(serverUri, CancellationToken.None);
349
if (FileTransportClientWebSocket.State != WebSocketState.Open)
350
await FileTransportClientWebSocket.ConnectAsync(serverUri, CancellationToken.None);
188
351
}
189
352
catch (Exception ex)
190
353
{
191
354
if (IsConnected == true)
192
355
{
193
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
356
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.FileTransportClient, TextMessageClientWebSocket, FileTransportClientWebSocket, false));
194
357
}
195
358
IsConnected = false;
196
359
if (autoReconnect)
@@ -203,25 +366,25 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
203
366
}
204
367
else
205
368
{
206
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, null, null, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
369
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, null, null, new XFECyberCommException("与XCC网络通讯明文服务器建立连接时发生异常", ex)));
207
370
return;
208
371
}
209
372
}
210
373
reconnectTimes = 0;
211
workBase.connected?.Invoke(this, new XCCConnectedEventArgsImpl(this, ClientWebSocket));
374
workBase.connected?.Invoke(this, new XCCConnectedEventArgsImpl(this, XCCClientType.FileTransportClient, TextMessageClientWebSocket, FileTransportClientWebSocket));
212
375
IsConnected = true;
213
while (ClientWebSocket.State == WebSocketState.Open)
376
while (FileTransportClientWebSocket.State == WebSocketState.Open)
214
377
{
215
378
try
216
379
{
217
380
byte[] receiveBuffer = new byte[1024];
218
WebSocketReceiveResult receiveResult = await ClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
381
WebSocketReceiveResult receiveResult = await TextMessageClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
219
382
var bufferList = new List<byte>();
220
383
bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
221
384
//ReceiveCompletedMessageByUsingWhile
222
385
while (!receiveResult.EndOfMessage)
223
386
{
224
receiveResult = await ClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
387
receiveResult = await TextMessageClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
225
388
bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
226
389
}
227
390
var receivedBinaryBuffer = bufferList.ToArray();
@@ -259,11 +422,11 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
259
422
default:
260
423
break;
261
424
}
262
workBase.textMessageReceived?.Invoke(this, new XCCTextMessageReceivedEventArgsImpl(this, ClientWebSocket, messageId, messageType, message, senderName, sendTime, isHistory));
425
workBase.textMessageReceived?.Invoke(this, new XCCTextMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, messageId, messageType, message, senderName, sendTime, isHistory));
263
426
}
264
427
catch (Exception ex)
265
428
{
266
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, null, null, new XFECyberCommException("接收XCC服务器消息时发生异常", ex)));
429
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, null, null, new XFECyberCommException("接收XCC服务器消息时发生异常", ex)));
267
430
}
268
431
}
269
432
if (receiveResult.MessageType == WebSocketMessageType.Binary)
@@ -300,20 +463,20 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
300
463
messageType = XCCBinaryMessageType.Binary;
301
464
break;
302
465
}
303
workBase.binaryMessageReceived?.Invoke(this, new XCCBinaryMessageReceivedEventArgsImpl(this, ClientWebSocket, sender, messageId, unPackedBuffer, messageType, signature));
466
workBase.binaryMessageReceived?.Invoke(this, new XCCBinaryMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, sender, messageId, unPackedBuffer, messageType, signature));
304
467
}
305
468
catch (Exception ex)
306
469
{
307
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, null, null, new XFECyberCommException("接收XCC服务器消息时发生异常", ex)));
470
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, null, null, new XFECyberCommException("接收XCC服务器消息时发生异常", ex)));
308
471
}
309
472
}
310
473
}
311
474
catch (Exception ex)
312
475
{
313
try { await ClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close", CancellationToken.None); } catch { }
476
try { await TextMessageClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close", CancellationToken.None); } catch { }
314
477
if (IsConnected == true)
315
478
{
316
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
479
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.FileTransportClient, TextMessageClientWebSocket, FileTransportClientWebSocket, false));
317
480
}
318
481
IsConnected = false;
319
482
if (autoReconnect)
@@ -327,12 +490,12 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
327
490
}
328
491
else
329
492
{
330
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, null, null, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
493
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, TextMessageClientWebSocket, FileTransportClientWebSocket, XCCClientType.FileTransportClient, null, null, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
331
494
return;
332
495
}
333
496
}
334
497
}
335
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, true));
498
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, XCCClientType.FileTransportClient, TextMessageClientWebSocket, FileTransportClientWebSocket, true));
336
499
}
337
500
/// <summary>
338
501
/// 发送文本消息,返回消息ID
@@ -358,7 +521,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
358
521
try
359
522
{
360
523
byte[] sendBuffer = Encoding.UTF8.GetBytes(new string[] { messageId, "[XCCTextMessage]", message }.ToXFEString());
361
await ClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
524
await TextMessageClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
362
525
var endTask = Task.Run(async () =>
363
526
{
364
527
await Task.Delay(timeout);
@@ -416,7 +579,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
416
579
try
417
580
{
418
581
var xFEBuffer = new XFEBuffer(Sender, message, "Type", Encoding.UTF8.GetBytes(signature), "ID", Encoding.UTF8.GetBytes(messageId));
419
await ClientWebSocket.SendAsync(new ArraySegment<byte>(xFEBuffer.ToBuffer()), WebSocketMessageType.Binary, true, CancellationToken.None);
582
await TextMessageClientWebSocket.SendAsync(new ArraySegment<byte>(xFEBuffer.ToBuffer()), WebSocketMessageType.Binary, true, CancellationToken.None);
420
583
var endTask = Task.Run(async () =>
421
584
{
422
585
await Task.Delay(timeout);
@@ -536,7 +699,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
536
699
{
537
700
var messageId = Guid.NewGuid().ToString();
538
701
byte[] sendBuffer = Encoding.UTF8.GetBytes(new string[] { messageId, "[XCCGetHistory]", "[XCCGetHistory]" }.ToXFEString());
539
await ClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
702
await TextMessageClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
540
703
var endTask = Task.Run(async () =>
541
704
{
542
705
await Task.Delay(5000);
@@ -558,7 +721,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
558
721
{
559
722
try
560
723
{
561
await ClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None);
724
await TextMessageClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None);
562
725
}
563
726
catch (Exception ex)
564
727
{
@@ -1016,15 +1179,23 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1016
1179
/// </summary>
1017
1180
public abstract class XCCMessageReceivedEventArgs : EventArgs
1018
1181
{
1019
/// <summary>
1020
/// 当前WebSocket
1021
/// </summary>
1022
public ClientWebSocket CurrentWebSocket { get; }
1023
1182
/// <summary>
1024
1183
/// 触发事件的群组
1025
1184
/// </summary>
1026
1185
public XCCGroup Group { get; }
1027
1186
/// <summary>
1187
/// WebSocket明文传输客户端
1188
/// </summary>
1189
public ClientWebSocket TextMessageClientWebSocket { get; private set; }
1190
/// <summary>
1191
/// WebSocket文件传输客户端
1192
/// </summary>
1193
public ClientWebSocket FileTransportClientWebSocket { get; private set; }
1194
/// <summary>
1195
/// XCC服务器连接类型
1196
/// </summary>
1197
public XCCClientType XCCClientType { get; }
1198
/// <summary>
1028
1199
/// 消息ID
1029
1200
/// </summary>
1030
1201
public string MessageId { get; }
@@ -1052,7 +1223,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1052
1223
try
1053
1224
{
1054
1225
byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
1055
await CurrentWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
1226
await TextMessageClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
1056
1227
}
1057
1228
catch (Exception ex)
1058
1229
{
@@ -1068,7 +1239,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1068
1239
{
1069
1240
try
1070
1241
{
1071
await CurrentWebSocket.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Binary, true, CancellationToken.None);
1242
await FileTransportClientWebSocket.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Binary, true, CancellationToken.None);
1072
1243
}
1073
1244
catch (Exception ex)
1074
1245
{
@@ -1083,17 +1254,22 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1083
1254
{
1084
1255
try
1085
1256
{
1086
await CurrentWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None);
1257
if (TextMessageClientWebSocket.State == WebSocketState.Open)
1258
await TextMessageClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None);
1259
if (FileTransportClientWebSocket.State == WebSocketState.Open)
1260
await FileTransportClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None);
1087
1261
}
1088
1262
catch (Exception ex)
1089
1263
{
1090
1264
throw new XFECyberCommException("客户端关闭连接时出现异常", ex);
1091
1265
}
1092
1266
}
1093
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, string sender, string messageId)
1267
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string sender, string messageId)
1094
1268
{
1095
1269
Group = group;
1096
CurrentWebSocket = clientWebSocket;
1270
TextMessageClientWebSocket = textMessageClientWebSocket;
1271
FileTransportClientWebSocket = fileTransportClientWebSocket;
1272
XCCClientType = xCCClientType;
1097
1273
Sender = sender;
1098
1274
MessageId = messageId;
1099
1275
}
@@ -1141,7 +1317,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1141
1317
/// 是否为历史消息
1142
1318
/// </summary>
1143
1319
public bool IsHistory { get; }
1144
internal XCCTextMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, string messageId, XCCTextMessageType messageType, string message, string sender, DateTime sendTime, bool isHistory) : base(group, clientWebSocket, sender, messageId)
1320
internal XCCTextMessageReceivedEventArgs(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string messageId, XCCTextMessageType messageType, string message, string sender, DateTime sendTime, bool isHistory) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, sender, messageId)
1145
1321
{
1146
1322
MessageType = messageType;
1147
1323
TextMessage = message;
@@ -1197,7 +1373,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1197
1373
/// 二进制消息
1198
1374
/// </summary>
1199
1375
public byte[] BinaryMessage { get; }
1200
internal XCCBinaryMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, string sender, string messageId, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, clientWebSocket, sender, messageId)
1376
internal XCCBinaryMessageReceivedEventArgs(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string sender, string messageId, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, sender, messageId)
1201
1377
{
1202
1378
BinaryMessage = buffer;
1203
1379
MessageType = messageType;
@@ -1213,7 +1389,7 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1213
1389
/// 异常信息
1214
1390
/// </summary>
1215
1391
public XFECyberCommException Exception { get; }
1216
internal XCCExceptionMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, string sender, string messageId, XFECyberCommException exception) : base(group, clientWebSocket, sender, messageId)
1392
internal XCCExceptionMessageReceivedEventArgs(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string sender, string messageId, XFECyberCommException exception) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, sender, messageId)
1217
1393
{
1218
1394
Exception = exception;
1219
1395
}
@@ -1224,22 +1400,33 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1224
1400
public abstract class XCCConnectionClosedEventArgs : EventArgs
1225
1401
{
1226
1402
/// <summary>
1227
/// 当前WebSocket
1403
/// 触发事件的群组
1228
1404
/// </summary>
1229
public ClientWebSocket CurrentWebSocket { get; }
1405
public XCCGroup Group { get; }
1230
1406
/// <summary>
1231
/// 是否正常关闭
1407
/// XCC服务器连接类型
1232
1408
/// </summary>
1233
public bool ClosedNormally { get; }
1409
public XCCClientType XCCClientType { get; }
1234
1410
/// <summary>
1235
/// 触发事件的群组
1411
/// WebSocket明文传输客户端
1236
1412
/// </summary>
1237
public XCCGroup Group { get; }
1238
internal XCCConnectionClosedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, bool closeNormally)
1413
public ClientWebSocket TextMessageClientWebSocket { get; private set; }
1414
/// <summary>
1415
/// WebSocket文件传输客户端
1416
/// </summary>
1417
public ClientWebSocket FileTransportClientWebSocket { get; private set; }
1418
/// <summary>
1419
/// 是否正常关闭
1420
/// </summary>
1421
public bool ClosedNormally { get; }
1422
1423
internal XCCConnectionClosedEventArgs(XCCGroup group, XCCClientType xCCClientType, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, bool closedNormally)
1239
1424
{
1240
CurrentWebSocket = clientWebSocket;
1241
1425
Group = group;
1242
ClosedNormally = closeNormally;
1426
XCCClientType = xCCClientType;
1427
TextMessageClientWebSocket = textMessageClientWebSocket;
1428
FileTransportClientWebSocket = fileTransportClientWebSocket;
1429
ClosedNormally = closedNormally;
1243
1430
}
1244
1431
}
1245
1432
/// <summary>
@@ -1247,18 +1434,29 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1247
1434
/// </summary>
1248
1435
public abstract class XCCConnectedEventArgs : EventArgs
1249
1436
{
1250
/// <summary>
1251
/// 当前WebSocket
1252
/// </summary>
1253
public ClientWebSocket CurrentWebSocket { get; }
1254
1437
/// <summary>
1255
1438
/// 触发事件的群组
1256
1439
/// </summary>
1257
1440
public XCCGroup Group { get; }
1258
internal XCCConnectedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket)
1441
/// <summary>
1442
/// XCC服务器连接类型
1443
/// </summary>
1444
public XCCClientType XCCClientType { get; }
1445
/// <summary>
1446
/// WebSocket明文传输客户端
1447
/// </summary>
1448
public ClientWebSocket TextMessageClientWebSocket { get; private set; }
1449
/// <summary>
1450
/// WebSocket文件传输客户端
1451
/// </summary>
1452
public ClientWebSocket FileTransportClientWebSocket { get; private set; }
1453
1454
internal XCCConnectedEventArgs(XCCGroup group, XCCClientType xCCClientType, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket)
1259
1455
{
1260
CurrentWebSocket = clientWebSocket;
1261
1456
Group = group;
1457
XCCClientType = xCCClientType;
1458
TextMessageClientWebSocket = textMessageClientWebSocket;
1459
FileTransportClientWebSocket = fileTransportClientWebSocket;
1262
1460
}
1263
1461
}
1264
1462
class XCCGroupImpl : XCCGroup
@@ -1267,22 +1465,22 @@ namespace XFE各类拓展.CyberComm.XCCNetWork
1267
1465
}
1268
1466
class XCCConnectionClosedEventArgsImpl : XCCConnectionClosedEventArgs
1269
1467
{
1270
internal XCCConnectionClosedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, bool closeNormally) : base(group, clientWebSocket, closeNormally) { }
1468
public XCCConnectionClosedEventArgsImpl(XCCGroup group, XCCClientType xCCClientType, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, bool closedNormally) : base(group, xCCClientType, textMessageClientWebSocket, fileTransportClientWebSocket, closedNormally) { }
1271
1469
}
1272
1470
class XCCConnectedEventArgsImpl : XCCConnectedEventArgs
1273
1471
{
1274
internal XCCConnectedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket) : base(group, clientWebSocket) { }
1472
public XCCConnectedEventArgsImpl(XCCGroup group, XCCClientType xCCClientType, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket) : base(group, xCCClientType, textMessageClientWebSocket, fileTransportClientWebSocket) { }
1275
1473
}
1276
1474
class XCCTextMessageReceivedEventArgsImpl : XCCTextMessageReceivedEventArgs
1277
1475
{
1278
internal XCCTextMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, string messageId, XCCTextMessageType messageType, string message, string sender, DateTime sendTime, bool isHistory) : base(group, clientWebSocket, messageId, messageType, message, sender, sendTime, isHistory) { }
1476
internal XCCTextMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string messageId, XCCTextMessageType messageType, string message, string sender, DateTime sendTime, bool isHistory) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, messageId, messageType, message, sender, sendTime, isHistory) { }
1279
1477
}
1280
1478
class XCCBinaryMessageReceivedEventArgsImpl : XCCBinaryMessageReceivedEventArgs
1281
1479
{
1282
internal XCCBinaryMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, string sender, string messageId, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, clientWebSocket, sender, messageId, buffer, messageType, signature) { }
1480
internal XCCBinaryMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string sender, string messageId, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, sender, messageId, buffer, messageType, signature) { }
1283
1481
}
1284
1482
class XCCExceptionMessageReceivedEventArgsImpl : XCCExceptionMessageReceivedEventArgs
1285
1483
{
1286
internal XCCExceptionMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, string sender, string messageId, XFECyberCommException exception) : base(group, clientWebSocket, sender, messageId, exception) { }
1484
internal XCCExceptionMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket textMessageClientWebSocket, ClientWebSocket fileTransportClientWebSocket, XCCClientType xCCClientType, string sender, string messageId, XFECyberCommException exception) : base(group, textMessageClientWebSocket, fileTransportClientWebSocket, xCCClientType, sender, messageId, exception) { }
1287
1485
}
1288
1486
}