XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
UTF-8
using System.Diagnostics;
using XFEExtension.NetCore.CyberComm;

namespace XFEExtension.NetCore.XFEConsole;

/// <summary>
/// XFE控制台程序客户端
/// </summary>
/// <remarks>
/// 默认构造函数
/// </remarks>
/// <param name="ipAddress">控制台输出端IP地址</param>
/// <param name="clientName">客户端名称</param>
/// <param name="clientID">客户端ID</param>
/// <param name="password">密码</param>
public class XFEConsoleProgramClient(string ipAddress, string clientName, string clientID, string password)
{
    /// <summary>
    /// 客户端
    /// </summary>
    public CyberCommClient Client { get; set; } = new(new CyberCommClientOptions
    {
        ServerUri = new Uri(ipAddress, UriKind.Absolute),
        Reconnect = new CyberCommReconnectOptions { Enabled = false, MaxAttempts = 0 },
        RequestHeaders = new Dictionary<string, string>
        {
            [nameof(ClientName)] = clientName,
            [nameof(Password)] = password,
            [nameof(ClientID)] = clientID
        }
    });
    /// <summary>
    /// 客户端名称
    /// </summary>
    public string ClientName { get; set; } = clientName;
    /// <summary>
    /// 客户端ID
    /// </summary>
    public string ClientID { get; set; } = clientID;
    /// <summary>
    /// 连接时密码
    /// </summary>
    public string Password { get; set; } = password;
    /// <summary>
    /// 连接服务器
    /// </summary>
    /// <returns></returns>
    public async Task<bool> Connect()
    {
        try
        {
            Client.ErrorHandler = exception => Debug.WriteLine(exception);
            await Client.ConnectAsync().ConfigureAwait(false);
            return Client.IsConnected;
        }
        catch (Exception exception)
        {
            Debug.WriteLine(exception);
            return false;
        }
    }

    /// <summary>
    /// 输出控制台消息
    /// </summary>
    /// <param name="message">消息文本</param>
    /// <param name="isLine">是否是一整行</param>
    /// <returns></returns>
    public async Task OutputMessage(string message, bool isLine)
    {
        try
        {
            if (Client.IsConnected)
                await Client.SendTextAsync(XFEConsoleProtocol.CreateOutputMessage(message, isLine));
        }
        catch { }
    }
}