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网络通讯的协议,现在可识别文件格式,新增封装:发送音频

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

代码差异

1 个文件 +84 -18
Modified XFE各类拓展/CyberComm.cs +84 -18
@@ -877,6 +877,14 @@ namespace XFE各类拓展.CyberComm
877 877 /// </summary>
878 878 Binary,
879 879 /// <summary>
880 /// 图片消息
881 /// </summary>
882 Image,
883 /// <summary>
884 /// 音频消息
885 /// </summary>
886 Audio,
887 /// <summary>
880 888 /// 错误消息
881 889 /// </summary>
882 890 Error
@@ -993,11 +1001,11 @@ namespace XFE各类拓展.CyberComm
993 1001 /// <summary>
994 1002 /// 启动XCC会话
995 1003 /// </summary>
996 /// <param name="AutoReconnect">是否自动重连</param>
997 /// <param name="ReconncetMaxTimes">最大重连次数,-1则为无限次</param>
998 /// <param name="ReconnectTryDelay">重连尝试延迟</param>
1004 /// <param name="autoReconnect">是否自动重连</param>
1005 /// <param name="reconnectMaxTimes">最大重连次数,-1则为无限次</param>
1006 /// <param name="reconnectTryDelay">重连尝试延迟</param>
999 1007 /// <returns></returns>
1000 public async void StartXCC(bool AutoReconnect = true, int ReconncetMaxTimes = -1, int ReconnectTryDelay = 100)
1008 public async void StartXCC(bool autoReconnect = true, int reconnectMaxTimes = -1, int reconnectTryDelay = 100)
1001 1009 {
1002 1010 XCCReconnect:
1003 1011 ClientWebSocket = new ClientWebSocket();
@@ -1016,11 +1024,11 @@ namespace XFE各类拓展.CyberComm
1016 1024 workBase.ConnectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1017 1025 }
1018 1026 IsConnected = false;
1019 if (AutoReconnect)
1027 if (autoReconnect)
1020 1028 {
1021 if (reconnectTimes <= ReconncetMaxTimes || ReconncetMaxTimes == -1)
1029 if (reconnectTimes <= reconnectMaxTimes || reconnectMaxTimes == -1)
1022 1030 {
1023 Thread.Sleep(ReconnectTryDelay);
1031 Thread.Sleep(reconnectTryDelay);
1024 1032 goto XCCReconnect;
1025 1033 }
1026 1034 }
@@ -1060,7 +1068,21 @@ namespace XFE各类拓展.CyberComm
1060 1068 receiveResult = await ClientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
1061 1069 bufferList.AddRange(receiveBuffer.Take(receiveResult.Count));
1062 1070 }
1063 workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, bufferList.ToArray()));
1071 var messageType = XCCMessageType.Binary;
1072 switch (bufferList[0])
1073 {
1074 case 0x01:
1075 messageType = XCCMessageType.Image;
1076 break;
1077 case 0x02:
1078 messageType = XCCMessageType.Audio;
1079 break;
1080 default:
1081 messageType = XCCMessageType.Binary;
1082 break;
1083 }
1084 bufferList.RemoveAt(0);
1085 workBase.MessageReceived?.Invoke(this, new XCCMessageReceivedEventArgsImpl(this, ClientWebSocket, bufferList.ToArray(), messageType, bufferList[0]));
1064 1086 }
1065 1087 }
1066 1088 catch (Exception ex)
@@ -1070,12 +1092,12 @@ namespace XFE各类拓展.CyberComm
1070 1092 workBase.ConnectionClosed?.Invoke(this, new XCCConnectionClosedEventArgsImpl(this, ClientWebSocket, false));
1071 1093 }
1072 1094 IsConnected = false;
1073 if (AutoReconnect)
1095 if (autoReconnect)
1074 1096 {
1075 if (AutoReconnect)
1097 if (autoReconnect)
1076 1098 {
1077 Thread.Sleep(ReconnectTryDelay);
1078 if (reconnectTimes <= ReconncetMaxTimes || ReconncetMaxTimes == -1)
1099 Thread.Sleep(reconnectTryDelay);
1100 if (reconnectTimes <= reconnectMaxTimes || reconnectMaxTimes == -1)
1079 1101 goto XCCReconnect;
1080 1102 }
1081 1103 }
@@ -1126,7 +1148,28 @@ namespace XFE各类拓展.CyberComm
1126 1148 }
1127 1149 }
1128 1150 /// <summary>
1129 /// 发送二进制消息
1151 /// 发送标准的二进制消息
1152 /// </summary>
1153 /// <param name="message">二进制消息</param>
1154 /// <param name="signature">标识</param>
1155 /// <returns></returns>
1156 /// <exception cref="XFECyberCommException"></exception>
1157 public async Task SendSignedBinaryMessage(byte[] message, byte signature)
1158 {
1159 try
1160 {
1161 byte[] sendBuffer = new byte[message.Length + 1];
1162 sendBuffer[0] = signature;
1163 message.CopyTo(sendBuffer, 1);
1164 await ClientWebSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
1165 }
1166 catch (Exception ex)
1167 {
1168 throw new XFECyberCommException("客户端发送二进制数据到服务器时出现异常", ex);
1169 }
1170 }
1171 /// <summary>
1172 /// 发送默认标准的二进制消息
1130 1173 /// </summary>
1131 1174 /// <param name="message">待发送的二进制数据</param>
1132 1175 /// <exception cref="XFECyberCommException"></exception>
@@ -1135,7 +1178,7 @@ namespace XFE各类拓展.CyberComm
1135 1178 {
1136 1179 try
1137 1180 {
1138 await ClientWebSocket.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Binary, true, CancellationToken.None);
1181 await SendSignedBinaryMessage(message, 0x00);
1139 1182 }
1140 1183 catch (Exception ex)
1141 1184 {
@@ -1152,7 +1195,7 @@ namespace XFE各类拓展.CyberComm
1152 1195 {
1153 1196 try
1154 1197 {
1155 await SendBinaryMessage(File.ReadAllBytes(filePath));
1198 await SendSignedBinaryMessage(File.ReadAllBytes(filePath), 0x01);
1156 1199 }
1157 1200 catch (Exception ex)
1158 1201 {
@@ -1160,6 +1203,23 @@ namespace XFE各类拓展.CyberComm
1160 1203 }
1161 1204 }
1162 1205 /// <summary>
1206 /// 发送音频
1207 /// </summary>
1208 /// <param name="buffer">二进制音频流</param>
1209 /// <returns></returns>
1210 /// <exception cref="XFECyberCommException"></exception>
1211 public async Task SendAudioBuffer(byte[] buffer)
1212 {
1213 try
1214 {
1215 await SendSignedBinaryMessage(buffer, 0x02);
1216 }
1217 catch (Exception ex)
1218 {
1219 throw new XFECyberCommException("客户端发送音频到服务器时出现异常", ex);
1220 }
1221 }
1222 /// <summary>
1163 1223 /// 获取历史记录
1164 1224 /// </summary>
1165 1225 /// <exception cref="XFECyberCommException"></exception>
@@ -1232,6 +1292,10 @@ namespace XFE各类拓展.CyberComm
1232 1292 /// </summary>
1233 1293 public string TextMessage { get; }
1234 1294 /// <summary>
1295 /// 消息签名
1296 /// </summary>
1297 public byte Signature { get; }
1298 /// <summary>
1235 1299 /// 触发事件的群组
1236 1300 /// </summary>
1237 1301 public XCCGroup Group { get; }
@@ -1276,14 +1340,16 @@ namespace XFE各类拓展.CyberComm
1276 1340 CurrentWebSocket = clientWebSocket;
1277 1341 TextMessage = message;
1278 1342 Group = group;
1343 Signature = 0x00;
1279 1344 MessageType = XCCMessageType.Text;
1280 1345 }
1281 internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes)
1346 internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes, XCCMessageType messageType, byte signature)
1282 1347 {
1283 1348 CurrentWebSocket = clientWebSocket;
1284 1349 BinaryMessage = bytes;
1285 1350 Group = group;
1286 MessageType = XCCMessageType.Binary;
1351 Signature = signature;
1352 MessageType = messageType;
1287 1353 }
1288 1354 internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException ex)
1289 1355 {
@@ -1342,7 +1408,7 @@ namespace XFE各类拓展.CyberComm
1342 1408 class XCCMessageReceivedEventArgsImpl : XCCMessageReceivedEventArgs
1343 1409 {
1344 1410 internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, string message) : base(group, clientWebSocket, message) { }
1345 internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes) : base(group, clientWebSocket, bytes) { }
1411 internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, byte[] bytes, XCCMessageType messageType, byte signature) : base(group, clientWebSocket, bytes, messageType, signature) { }
1346 1412 internal XCCMessageReceivedEventArgsImpl(XCCGroup group, ClientWebSocket clientWebSocket, XFECyberCommException ex) : base(group, clientWebSocket, ex) { }
1347 1413 }
1348 1414 class XCCConnectionClosedEventArgsImpl : XCCConnectionClosedEventArgs