XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

XCC网络通讯现在分为明文和文件两个服务器分别传输

8b3e5c4
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

1 个文件 +254 -56
Modified XFE各类拓展/XCCNetWork.cs +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 }