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
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);
|
|
}
|
|
}
|
|
}
|