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

XFEExtension

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

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFEExtension.NetCore.CyberComm.XCCNetWork;

/// <summary>
/// XCC网络通讯
/// </summary>
public class XCCNetWork
{
    private readonly XCCNetWorkBase _xCCNetWorkBase;
    /// <summary>
    /// XCC当前群组
    /// </summary>
    public List<XCCGroup> Groups { get; set; }
    /// <summary>显式配置的 XCC WSS 端点。</summary>
    public Uri? ServerUri { get; set; }
    /// <summary>
    /// 明文消息接收时触发
    /// </summary>
    public event EventHandler<XCCTextMessageReceivedEventArgs> TextMessageReceived
    {
        add
        {
            _xCCNetWorkBase.TextMessageReceived += value;
        }
        remove
        {
            _xCCNetWorkBase.TextMessageReceived -= value;
        }
    }
    /// <summary>
    /// 二进制消息接收时触发
    /// </summary>
    public event EventHandler<XCCBinaryMessageReceivedEventArgs> BinaryMessageReceived
    {
        add
        {
            _xCCNetWorkBase.BinaryMessageReceived += value;
        }
        remove
        {
            _xCCNetWorkBase.BinaryMessageReceived -= value;
        }
    }
    /// <summary>
    /// 异常消息接收时触发
    /// </summary>
    public event EventHandler<XCCExceptionMessageReceivedEventArgs> ExceptionMessageReceived
    {
        add
        {
            _xCCNetWorkBase.ExceptionMessageReceived += value;
        }
        remove
        {
            _xCCNetWorkBase.ExceptionMessageReceived -= value;
        }
    }
    /// <summary>
    /// 连接关闭时触发
    /// </summary>
    public event EventHandler<XCCConnectionClosedEventArgs> ConnectionClosed
    {
        add
        {
            _xCCNetWorkBase.ConnectionClosed += value;
        }
        remove
        {
            _xCCNetWorkBase.ConnectionClosed -= value;
        }
    }
    /// <summary>
    /// 连接成功时触发
    /// </summary>
    public event EventHandler<XCCConnectedEventArgs> Connected
    {
        add
        {
            _xCCNetWorkBase.Connected += value;
        }
        remove
        {
            _xCCNetWorkBase.Connected -= value;
        }
    }
    /// <summary>
    /// 创建XCC群组会话
    /// </summary>
    /// <param name="groupId">群组名称</param>
    /// <param name="sender">发送者</param>
    /// <returns></returns>
    public XCCGroup CreateGroup(string groupId, string sender)
    {
        var serverUri = ServerUri ?? throw new InvalidOperationException("必须先配置 XCC ServerUri,且生产环境应使用 wss");
        var group = new XCCGroupImpl(Guid.NewGuid().ToString(), groupId, sender, serverUri, _xCCNetWorkBase);
        Groups.Add(group);
        return group;
    }
    /// <summary>
    /// XCC网络通信会话
    /// </summary>
    public XCCNetWork()
    {
        _xCCNetWorkBase = new XCCNetWorkBase();
        Groups = [];
    }

    /// <summary>使用显式端点创建 XCC 会话。</summary>
    public XCCNetWork(Uri serverUri) : this()
    {
        if (serverUri.Scheme is not ("ws" or "wss")) throw new ArgumentException("XCC 端点必须使用 ws 或 wss", nameof(serverUri));
        ServerUri = serverUri;
    }
}