我有一个名为IConnection的接口
public interface IConnection
{
bool IsConnected { get; }
Task ConnectAsync(IEndPoint remoteEP);
Task<int> SendAsync(byte[] data, int offset, int size);
Task<int> ReceiveAsync(byte[] buffer, int offset, int size);
void Disconnect();
void Close();
event EventHandler<DisconnectedEventArgs> Disconnected;
}
它由两种不同类型的连接实现——基于套接字的连接类和基于HTTP的连接类。我还希望将来可以选择添加其他连接类型。
当在我的主ChatClient类中启动连接时,我会检查用户的配置,然后根据用户的喜好,创建SocketConnection或HTTPConnection。从那时起,我只使用它的IConnection接口来指代连接。
IConnection类有一个Disconnected事件,当用户调用Disconnect或发生意外连接错误时会引发该事件。DisconnectedEventArgs将包含导致断开连接的原因的信息。
我想知道的是,我如何抽象不同类型的错误?
套接字可能会遇到许多不同的错误情况,导致其断开连接,包括但不限于-
- 远程端启动了一个正常的断开连接(即Read返回0)
- 读/写引发带有SocketError.ConnectionAborted标志的SocketException
- 读/写引发带有SocketError.NetworkReset标志的SocketException
http连接也可能遇到许多不同的错误情况,例如-
- 轮询远程服务器失败--例如主机突然消失
- HTTP身份验证凭据被拒绝
如何将套接字的所有可能的错误和http连接的所有可能错误合并为一个类型?
我是否使用包含所有可能错误值的枚举?
我有一个简单的错误代码和错误描述吗?
我应该处理多少套接字错误情况?只有我期望遇到的人?还是全部?
为什么不让DisconnectEventArgs
包含public Exception Error { get; set; }
。正常调用Disconnect
时,Error
为null,否则包含Socket或Http异常。