You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.7 KiB

using CoreAgent.WebSocketTransport.Interfaces;
using CoreAgent.WebSocketTransport.Services;
namespace CoreAgent.WebSocketTransport.Examples;
/// <summary>
/// 组合模式使用示例
/// 展示如何使用 IWebSocketTransport 和 IMessageChannelManager 的组合
/// </summary>
public class CompositionPatternExample
{
private readonly IWebSocketTransport _webSocketTransport;
private readonly IMessageChannelManager _channelManager;
public CompositionPatternExample(IWebSocketTransport webSocketTransport, IMessageChannelManager channelManager)
{
_webSocketTransport = webSocketTransport;
_channelManager = channelManager;
}
/// <summary>
/// 示例:基本使用流程
/// </summary>
public async Task BasicUsageAsync()
{
// 1. 连接服务器
await _webSocketTransport.ConnectAsync();
Console.WriteLine($"连接状态: {_webSocketTransport.IsConnected}");
// 2. 发送消息 - 通过通道管理器
await _channelManager.SendChannel.WriteAsync("Hello World");
await _channelManager.SendChannel.WriteAsync(new { type = "chat", message = "Hello" });
// 3. 接收消息 - 通过通道管理器
_ = Task.Run(async () =>
{
while (!_channelManager.ReceiveChannel.IsCompleted)
{
if (_channelManager.ReceiveChannel.TryRead(out var message))
{
Console.WriteLine($"收到消息: {message}");
}
await Task.Delay(100);
}
});
// 4. 关闭连接
await _webSocketTransport.CloseAsync();
}
/// <summary>
/// 示例:优先级消息处理
/// </summary>
public async Task PriorityMessageExampleAsync()
{
await _webSocketTransport.ConnectAsync();
// 发送普通消息
await _channelManager.SendChannel.WriteAsync("Normal message");
// 发送优先级消息
//await _channelManager.PriorityChannel.WriteAsync("Priority message");
// 等待消息发送完成
await Task.Delay(1000);
await _webSocketTransport.CloseAsync();
}
/// <summary>
/// 示例:连接状态监控
/// </summary>
public async Task ConnectionMonitoringExampleAsync()
{
await _webSocketTransport.ConnectAsync();
// 监控连接状态和心跳
while (_webSocketTransport.IsConnected)
{
Console.WriteLine($"连接状态: {_webSocketTransport.IsConnected}");
Console.WriteLine($"最后心跳: {_webSocketTransport.LastHeartbeat}");
await Task.Delay(5000);
}
}
}