XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFE各类拓展/CyberComm.cs
+176
-92
Added
XFE各类拓展/bin - 快捷方式.lnk
+0
-0
XFEstudio/XFEExtension
修正协议内容 修改触发事件,现在,明文传输和二进制传输以及异常抛出的接收都将封装为单独的事件参数
5ccacc2
代码差异
2 个文件
+176
-92
@@ -865,9 +865,9 @@ namespace XFE各类拓展.CyberComm
865
865
namespace XCCNetWork
866
866
{
867
867
/// <summary>
868
/// XFE网络通信返回消息类型
868
/// XFE网络通信二进制返回消息类型
869
869
/// </summary>
870
public enum XCCMessageType
870
public enum XCCBinaryMessageType
871
871
{
872
872
/// <summary>
873
873
/// 文本消息
@@ -884,26 +884,40 @@ namespace XFE各类拓展.CyberComm
884
884
/// <summary>
885
885
/// 音频消息
886
886
/// </summary>
887
Audio,
887
Audio
888
}
889
/// <summary>
890
/// XFE网络通信明文返回消息类型
891
/// </summary>
892
public enum XCCTextMessageType
893
{
888
894
/// <summary>
889
/// 错误消息
895
/// 文本消息
890
896
/// </summary>
891
Error
897
Text
892
898
}
893
899
class XCCNetWorkBase
894
900
{
895
901
/// <summary>
896
/// 消息接收时触发
902
/// 明文消息接收时触发
897
903
/// </summary>
898
public EventHandler<XCCMessageReceivedEventArgs> MessageReceived;
904
public EventHandler<XCCTextMessageReceivedEventArgs> textMessageReceived;
905
/// <summary>
906
/// 二进制消息接收时触发
907
/// </summary>
908
public EventHandler<XCCBinaryMessageReceivedEventArgs> binaryMessageReceived;
909
/// <summary>
910
/// 异常消息接收时触发
911
/// </summary>
912
public EventHandler<XCCExceptionMessageReceivedEventArgs> exceptionMessageReceived;
899
913
/// <summary>
900
914
/// 连接关闭时触发
901
915
/// </summary>
902
public EventHandler<XCCConnectionClosedEventArgs> ConnectionClosed;
916
public EventHandler<XCCConnectionClosedEventArgs> connectionClosed;
903
917
/// <summary>
904
918
/// 连接成功时触发
905
919
/// </summary>
906
public EventHandler<XCCConnectedEventArgs> Connected;
920
public EventHandler<XCCConnectedEventArgs> connected;
907
921
}
908
922
/// <summary>
909
923
/// XCC网络通讯
@@ -916,17 +930,45 @@ namespace XFE各类拓展.CyberComm
916
930
/// </summary>
917
931
public List<XCCGroup> Groups { get; set; }
918
932
/// <summary>
919
/// 消息接收时触发
933
/// 明文消息接收时触发
934
/// </summary>
935
public event EventHandler<XCCTextMessageReceivedEventArgs> TextMessageReceived
936
{
937
add
938
{
939
xCCNetWorkBase.textMessageReceived += value;
940
}
941
remove
942
{
943
xCCNetWorkBase.textMessageReceived -= value;
944
}
945
}
946
/// <summary>
947
/// 二进制消息接收时触发
920
948
/// </summary>
921
public event EventHandler<XCCMessageReceivedEventArgs> MessageReceived
949
public event EventHandler<XCCBinaryMessageReceivedEventArgs> BinaryMessageReceived
922
950
{
923
951
add
924
952
{
925
xCCNetWorkBase.MessageReceived += value;
953
xCCNetWorkBase.binaryMessageReceived += value;
926
954
}
927
955
remove
928
956
{
929
xCCNetWorkBase.MessageReceived -= value;
957
xCCNetWorkBase.binaryMessageReceived -= value;
958
}
959
}
960
/// <summary>
961
/// 异常消息接收时触发
962
/// </summary>
963
public event EventHandler<XCCExceptionMessageReceivedEventArgs> ExceptionMessageReceived
964
{
965
add
966
{
967
xCCNetWorkBase.exceptionMessageReceived += value;
968
}
969
remove
970
{
971
xCCNetWorkBase.exceptionMessageReceived -= value;
930
972
}
931
973
}
932
974
/// <summary>
@@ -936,11 +978,11 @@ namespace XFE各类拓展.CyberComm
936
978
{
937
979
add
938
980
{
939
xCCNetWorkBase.ConnectionClosed += value;
981
xCCNetWorkBase.connectionClosed += value;
940
982
}
941
983
remove
942
984
{
943
xCCNetWorkBase.ConnectionClosed -= value;
985
xCCNetWorkBase.connectionClosed -= value;
944
986
}
945
987
}
946
988
/// <summary>
@@ -950,11 +992,11 @@ namespace XFE各类拓展.CyberComm
950
992
{
951
993
add
952
994
{
953
xCCNetWorkBase.Connected += value;
995
xCCNetWorkBase.connected += value;
954
996
}
955
997
remove
956
998
{
957
xCCNetWorkBase.Connected -= value;
999
xCCNetWorkBase.connected -= value;
958
1000
}
959
1001
}
960
1002
/// <summary>
@@ -1029,7 +1071,7 @@ namespace XFE各类拓展.CyberComm
1029
1071
{
1030
1072
if (IsConnected == true)
1031
1073
{
1032
workBase.ConnectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1074
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1033
1075
}
1034
1076
IsConnected = false;
1035
1077
if (autoReconnect)
@@ -1042,12 +1084,12 @@ namespace XFE各类拓展.CyberComm
1042
1084
}
1043
1085
else
1044
1086
{
1045
workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
1087
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
1046
1088
return;
1047
1089
}
1048
1090
}
1049
1091
reconnectTimes = 0;
1050
workBase.Connected?.Invoke(this, new XCCConnectedEventArgsImpl(this, ClientWebSocket));
1092
workBase.connected?.Invoke(this, new XCCConnectedEventArgsImpl(this, ClientWebSocket));
1051
1093
IsConnected = true;
1052
1094
while (ClientWebSocket.State == WebSocketState.Open)
1053
1095
{
@@ -1064,7 +1106,7 @@ namespace XFE各类拓展.CyberComm
1064
1106
receiveResult = await ClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
1065
1107
receivedMessage += Encoding.UTF8.GetString(receiveBuffer, 0, receiveResult.Count);
1066
1108
}
1067
workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, receivedMessage));
1109
workBase.textMessageReceived?.Invoke(this, new XCCTextMessageReceivedEventArgsImpl(this, ClientWebSocket, XCCTextMessageType.Text, receivedMessage));
1068
1110
}
1069
1111
if (receiveResult.MessageType == WebSocketMessageType.Binary)
1070
1112
{
@@ -1077,30 +1119,31 @@ namespace XFE各类拓展.CyberComm
1077
1119
bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
1078
1120
}
1079
1121
var receivedBinaryBuffer = bufferList.ToArray();
1080
var messageType = XCCMessageType.Binary;
1122
var messageType = XCCBinaryMessageType.Binary;
1081
1123
var xFEBuffer = XFEBuffer.ToXFEBuffer(receivedBinaryBuffer);
1082
1124
var sender = Encoding.UTF8.GetString(xFEBuffer["Sender"]);
1083
1125
var signature = Encoding.UTF8.GetString(xFEBuffer["Type"]);
1126
var unPackedBuffer = xFEBuffer[sender];
1084
1127
switch (signature)
1085
1128
{
1086
1129
case "image":
1087
messageType = XCCMessageType.Image;
1130
messageType = XCCBinaryMessageType.Image;
1088
1131
break;
1089
1132
case "audio":
1090
messageType = XCCMessageType.Audio;
1133
messageType = XCCBinaryMessageType.Audio;
1091
1134
break;
1092
1135
default:
1093
messageType = XCCMessageType.Binary;
1136
messageType = XCCBinaryMessageType.Binary;
1094
1137
break;
1095
1138
}
1096
workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, bufferList.ToArray(), messageType, signature));
1139
workBase.binaryMessageReceived?.Invoke(this, new XCCBinaryMessageReceivedEventArgsImpl(this, ClientWebSocket, unPackedBuffer, messageType, signature));
1097
1140
}
1098
1141
}
1099
1142
catch (Exception ex)
1100
1143
{
1101
1144
if (IsConnected == true)
1102
1145
{
1103
workBase.ConnectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1146
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1104
1147
}
1105
1148
IsConnected = false;
1106
1149
if (autoReconnect)
@@ -1114,12 +1157,12 @@ namespace XFE各类拓展.CyberComm
1114
1157
}
1115
1158
else
1116
1159
{
1117
workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, new XFECyberCommException("与XCC网络通讯服务器通讯时发生异常", ex)));
1160
workBase.exceptionMessageReceived?.Invoke(this, new XCCExceptionMessageReceivedEventArgsImpl(this, ClientWebSocket, new XFECyberCommException("与XCC网络通讯服务器建立连接时发生异常", ex)));
1118
1161
return;
1119
1162
}
1120
1163
}
1121
1164
}
1122
workBase.ConnectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, true));
1165
workBase.connectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, true));
1123
1166
}
1124
1167
/// <summary>
1125
1168
/// 发送文本消息
@@ -1131,7 +1174,7 @@ namespace XFE各类拓展.CyberComm
1131
1174
{
1132
1175
try
1133
1176
{
1134
byte[] sendBuffer = Encoding.UTF8.GetBytes(new XCCMessage(Sender, message).ToString());
1177
byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
1135
1178
await ClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
1136
1179
}
1137
1180
catch (Exception ex)
@@ -1140,24 +1183,6 @@ namespace XFE各类拓展.CyberComm
1140
1183
}
1141
1184
}
1142
1185
/// <summary>
1143
/// 发送二进制文本消息
1144
/// </summary>
1145
/// <param name="message">消息</param>
1146
/// <returns></returns>
1147
/// <exception cref="XFECyberCommException"></exception>
1148
public async Task SendBinaryTextMessage(string message)
1149
{
1150
try
1151
{
1152
var waitSendBuffer = new XFEBuffer(Sender, Encoding.UTF8.GetBytes(message));
1153
await ClientWebSocket.SendAsync(new ArraySegment<byte>(waitSendBuffer.ToBuffer()), WebSocketMessageType.Binary, true, CancellationToken.None);
1154
}
1155
catch (Exception ex)
1156
{
1157
throw new XFECyberCommException("客户端发送文本到服务器时出现异常", ex);
1158
}
1159
}
1160
/// <summary>
1161
1186
/// 发送标准的文本消息
1162
1187
/// </summary>
1163
1188
/// <param name="role">发送者角色</param>
@@ -1169,8 +1194,7 @@ namespace XFE各类拓展.CyberComm
1169
1194
{
1170
1195
try
1171
1196
{
1172
byte[] sendBuffer = Encoding.UTF8.GetBytes(new XCCMessage(role, message).ToString());
1173
await ClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
1197
await SendTextMessage(message);
1174
1198
}
1175
1199
catch (Exception ex)
1176
1200
{
@@ -1188,7 +1212,7 @@ namespace XFE各类拓展.CyberComm
1188
1212
{
1189
1213
try
1190
1214
{
1191
var xFEBuffer = new XFEBuffer(Sender, message, "Sender", Encoding.UTF8.GetBytes(Sender), "Type", Encoding.UTF8.GetBytes(signature));
1215
var xFEBuffer = new XFEBuffer(Sender, message, "Type", Encoding.UTF8.GetBytes(signature), "ID", Guid.NewGuid().ToByteArray());
1192
1216
await ClientWebSocket.SendAsync(new ArraySegment<byte>(xFEBuffer.ToBuffer()), WebSocketMessageType.Binary, true, CancellationToken.None);
1193
1217
}
1194
1218
catch (Exception ex)
@@ -1197,6 +1221,23 @@ namespace XFE各类拓展.CyberComm
1197
1221
}
1198
1222
}
1199
1223
/// <summary>
1224
/// 发送二进制文本消息
1225
/// </summary>
1226
/// <param name="message">消息</param>
1227
/// <returns></returns>
1228
/// <exception cref="XFECyberCommException"></exception>
1229
public async Task SendBinaryTextMessage(string message)
1230
{
1231
try
1232
{
1233
await SendSignedBinaryMessage(Encoding.UTF8.GetBytes(message), "text");
1234
}
1235
catch (Exception ex)
1236
{
1237
throw new XFECyberCommException("客户端发送文本到服务器时出现异常", ex);
1238
}
1239
}
1240
/// <summary>
1200
1241
/// 发送默认标准的二进制消息
1201
1242
/// </summary>
1202
1243
/// <param name="message">待发送的二进制数据</param>
@@ -1304,27 +1345,11 @@ namespace XFE各类拓展.CyberComm
1304
1345
/// </summary>
1305
1346
public abstract class XCCMessageReceivedEventArgs : EventArgs
1306
1347
{
1307
/// <summary>
1308
/// 返回的消息类型
1309
/// </summary>
1310
public XCCMessageType MessageType { get; }
1311
1348
/// <summary>
1312
1349
/// 当前WebSocket
1313
1350
/// </summary>
1314
1351
public ClientWebSocket CurrentWebSocket { get; }
1315
1352
/// <summary>
1316
/// 异常信息
1317
/// </summary>
1318
public XFECyberCommException Exception { get; }
1319
/// <summary>
1320
/// 文本消息
1321
/// </summary>
1322
public string TextMessage { get; }
1323
/// <summary>
1324
/// 消息签名
1325
/// </summary>
1326
public string Signature { get; }
1327
/// <summary>
1328
1353
/// 触发事件的群组
1329
1354
/// </summary>
1330
1355
public XCCGroup Group { get; }
@@ -1349,15 +1374,11 @@ namespace XFE各类拓展.CyberComm
1349
1374
}
1350
1375
}
1351
1376
/// <summary>
1352
/// 二进制消息
1353
/// </summary>
1354
public byte[] BinaryMessage { get; }
1355
/// <summary>
1356
/// 发送文本消息
1377
/// 回复文本消息
1357
1378
/// </summary>
1358
1379
/// <param name="message">待发送的文本</param>
1359
1380
/// <returns>发送进程</returns>
1360
public async void ReplyMessage(string message)
1381
public async void ReplyTextMessage(string message)
1361
1382
{
1362
1383
try
1363
1384
{
@@ -1370,6 +1391,22 @@ namespace XFE各类拓展.CyberComm
1370
1391
}
1371
1392
}
1372
1393
/// <summary>
1394
/// 回复二进制消息
1395
/// </summary>
1396
/// <param name="message">二进制消息</param>
1397
/// <exception cref="XFECyberCommException"></exception>
1398
public async void ReplyBinaryMessage(byte[] message)
1399
{
1400
try
1401
{
1402
await CurrentWebSocket.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Binary, true, CancellationToken.None);
1403
}
1404
catch (Exception ex)
1405
{
1406
throw new XFECyberCommException("收到服务器端数据后客户端回复文本数据时出现异常", ex);
1407
}
1408
}
1409
/// <summary>
1373
1410
/// 关闭连接
1374
1411
/// </summary>
1375
1412
/// <exception cref="XFECyberCommException"></exception>
@@ -1384,27 +1421,68 @@ namespace XFE各类拓展.CyberComm
1384
1421
throw new XFECyberCommException("客户端关闭连接时出现异常", ex);
1385
1422
}
1386
1423
}
1387
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, string message)
1424
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket)
1388
1425
{
1426
Group = group;
1389
1427
CurrentWebSocket = clientWebSocket;
1428
}
1429
}
1430
/// <summary>
1431
/// XCC网络通讯接收到明文消息事件
1432
/// </summary>
1433
public abstract class XCCTextMessageReceivedEventArgs : XCCMessageReceivedEventArgs
1434
{
1435
/// <summary>
1436
/// 返回文本消息类型
1437
/// </summary>
1438
public XCCTextMessageType MessageType { get; }
1439
/// <summary>
1440
/// 文本消息
1441
/// </summary>
1442
public string TextMessage { get; }
1443
internal XCCTextMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, XCCTextMessageType messageType, string message) : base(group, clientWebSocket)
1444
{
1445
MessageType = messageType;
1390
1446
TextMessage = message;
1391
Group = group;
1392
Signature = "binary";
1393
MessageType = XCCMessageType.Text;
1394
1447
}
1395
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes, XCCMessageType messageType, string signature)
1448
1449
}
1450
/// <summary>
1451
/// XCC网络通讯接收到二进制消息事件
1452
/// </summary>
1453
public abstract class XCCBinaryMessageReceivedEventArgs : XCCMessageReceivedEventArgs
1454
{
1455
/// <summary>
1456
/// 返回二进制消息类型
1457
/// </summary>
1458
public XCCBinaryMessageType MessageType { get; }
1459
/// <summary>
1460
/// 消息签名
1461
/// </summary>
1462
public string Signature { get; }
1463
/// <summary>
1464
/// 二进制消息
1465
/// </summary>
1466
public byte[] BinaryMessage { get; }
1467
internal XCCBinaryMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, clientWebSocket)
1396
1468
{
1397
CurrentWebSocket = clientWebSocket;
1398
BinaryMessage = bytes;
1399
Group = group;
1400
Signature = signature;
1469
BinaryMessage = buffer;
1401
1470
MessageType = messageType;
1471
Signature = signature;
1402
1472
}
1403
internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException ex)
1473
}
1474
/// <summary>
1475
/// XCC网络通讯期间异常事件
1476
/// </summary>
1477
public abstract class XCCExceptionMessageReceivedEventArgs : XCCMessageReceivedEventArgs
1478
{
1479
/// <summary>
1480
/// 异常信息
1481
/// </summary>
1482
public XFECyberCommException Exception { get; }
1483
internal XCCExceptionMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException exception) : base(group, clientWebSocket)
1404
1484
{
1405
CurrentWebSocket = clientWebSocket;
1406
Exception = ex;
1407
MessageType = XCCMessageType.Error;
1485
Exception = exception;
1408
1486
}
1409
1487
}
1410
1488
/// <summary>
@@ -1454,12 +1532,6 @@ namespace XFE各类拓展.CyberComm
1454
1532
{
1455
1533
internal XCCGroupImpl(string groupId, string sender, XCCNetWorkBase xCCNetWorkBase) : base(groupId, sender, xCCNetWorkBase) { }
1456
1534
}
1457
class XCCMessageReceivedEventArgsImpl : XCCMessageReceivedEventArgs
1458
{
1459
internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, string message) : base(group, clientWebSocket, message) { }
1460
internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes, XCCMessageType messageType, string signature) : base(group, clientWebSocket, bytes, messageType, signature) { }
1461
internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException ex) : base(group, clientWebSocket, ex) { }
1462
}
1463
1535
class XCCConnectionClosedEventArgsImpl : XCCConnectionClosedEventArgs
1464
1536
{
1465
1537
internal XCCConnectionClosedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, bool closeNormally) : base(group, clientWebSocket, closeNormally) { }
@@ -1468,5 +1540,17 @@ namespace XFE各类拓展.CyberComm
1468
1540
{
1469
1541
internal XCCConnectedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket) : base(group, clientWebSocket) { }
1470
1542
}
1543
class XCCTextMessageReceivedEventArgsImpl : XCCTextMessageReceivedEventArgs
1544
{
1545
internal XCCTextMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, XCCTextMessageType messageType, string message) : base(group, clientWebSocket, messageType, message) { }
1546
}
1547
class XCCBinaryMessageReceivedEventArgsImpl : XCCBinaryMessageReceivedEventArgs
1548
{
1549
internal XCCBinaryMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, byte[] buffer, XCCBinaryMessageType messageType, string signature) : base(group, clientWebSocket, buffer, messageType, signature) { }
1550
}
1551
class XCCExceptionMessageReceivedEventArgsImpl : XCCExceptionMessageReceivedEventArgs
1552
{
1553
internal XCCExceptionMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException exception) : base(group, clientWebSocket, exception) { }
1554
}
1471
1555
}
1472
1556
}
二进制文件已变更,无法进行逐行预览。