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

XFEExtension

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

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

XFEstudio/XFEExtension

修正协议内容 修改触发事件,现在,明文传输和二进制传输以及异常抛出的接收都将封装为单独的事件参数

5ccacc2
XFE工作室室长 <xfe18827675401@126.com>
提交于

代码差异

2 个文件 +176 -92
Modified XFE各类拓展/CyberComm.cs +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 }
Added XFE各类拓展/bin - 快捷方式.lnk +0 -0
二进制文件已变更,无法进行逐行预览。