using System.Net.WebSockets; using System.Text; using XFEExtension.NetCore.Exceptions; namespace XFEExtension.NetCore.CyberComm.XCCNetWork; /// /// XCC网络通讯事件 /// public abstract class XCCMessageReceivedEventArgs : EventArgs { /// /// 触发事件的群组 /// public XCCGroup Group { get; } /// /// WebSocket明文传输客户端 /// public ClientWebSocket? TextMessageClientWebSocket { get; private set; } /// /// WebSocket文件传输客户端 /// public ClientWebSocket? FileTransportClientWebSocket { get; private set; } /// /// XCC服务器连接类型 /// public XCCClientType XCCClientType { get; } /// /// 消息ID /// public string? MessageId { get; } /// /// 群组ID /// public string GroupId { get { return Group.GroupId; } } /// /// 发送者 /// public string? Sender { get; } /// /// 回复文本消息 /// /// 待发送的文本 /// 发送进程 public async Task ReplyTextMessage(string message) { try { var sendBuffer = Encoding.UTF8.GetBytes(message); await TextMessageClientWebSocket!.SendAsync(new ArraySegment(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None); } catch (Exception ex) { throw new XFECyberCommException("收到服务器端数据后客户端回复文本数据时出现异常", ex); } } /// /// 回复二进制消息 /// /// 二进制消息 /// public async Task ReplyBinaryMessage(byte[] message) { try { await FileTransportClientWebSocket!.SendAsync(new ArraySegment(message), WebSocketMessageType.Binary, true, CancellationToken.None); } catch (Exception ex) { throw new XFECyberCommException("收到服务器端数据后客户端回复文本数据时出现异常", ex); } } /// /// 关闭连接 /// /// public async Task Close() { try { if (TextMessageClientWebSocket?.State == WebSocketState.Open) await TextMessageClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None); if (FileTransportClientWebSocket?.State == WebSocketState.Open) await FileTransportClientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客户端主动关闭连接", CancellationToken.None); } catch (Exception ex) { throw new XFECyberCommException("客户端关闭连接时出现异常", ex); } } internal XCCMessageReceivedEventArgs(XCCGroup group, ClientWebSocket? textMessageClientWebSocket, ClientWebSocket? fileTransportClientWebSocket, XCCClientType xCCClientType, string? sender, string? messageId) { Group = group; TextMessageClientWebSocket = textMessageClientWebSocket; FileTransportClientWebSocket = fileTransportClientWebSocket; XCCClientType = xCCClientType; Sender = sender; MessageId = messageId; } }