namespace BF { /// /// 用于创建连接的configuration /// public sealed class NetConnectConfiguration { private NetIncomingMessageType disabledMessageTypes = NetIncomingMessageType.DebugMessage; private NetServiceType serviceType = NetServiceType.TCPService; /// /// 需要的服务类型,目前只支持TCPService,默认TCPService /// public NetServiceType ServiceType { get => serviceType; } private string uniqueIdentifier = "Default"; /// /// 目标连接的ID,每一个连接应该唯一;相同ID不会再次创建 /// public string UniqueIdentifier { get => uniqueIdentifier; } private string initializeExchangeRc4Key = "saoisc09341010SSAWrevnvn"; /// /// socket连接成功后,交换密钥阶段的初始密钥,只能设置一次; /// 需要和服务器统一; /// public string InitializeExchangeRc4Key { get => initializeExchangeRc4Key; set => initializeExchangeRc4Key = value; } private int sendBufferCapacity = 1024 * 8; /// /// 等待socket发送buffer的大小,默认 1024*8 /// public int SendBufferCapacity { get => sendBufferCapacity; set => sendBufferCapacity = value; } private int receiveBufferCapacity = 1024 * 8; /// /// 接受socket数据的buffer,默认 1024*8 /// public int ReceiveBufferCapacity { get => receiveBufferCapacity; set => receiveBufferCapacity = value; } private int messagePoolCapacity = 20; /// /// incoming message pool 和 outgoing message pool 的最大值;默认 20 /// 对象池缓存的数量超过此值,新的回收message 将被释放,会有GC产生 /// public int MessagePoolCapacity { get => messagePoolCapacity; set => messagePoolCapacity = value; } private int alreadySendMessageCacheCount = 10; /// /// 缓存已经发送的消息数量,默认 15;超过缓存数量,连接成功后,发送消息会失败!!!可以适当大一点 /// public int AlreadySendMessageCacheCount { get => alreadySendMessageCacheCount; set => alreadySendMessageCacheCount = value; } private bool enableSilenceReconnect = true; /// /// 是否使用静默重连,默认启用; /// 如果特殊原因禁用,应该应用层自己实现重连逻辑 /// public bool EnableSilenceReconnect { get => enableSilenceReconnect; set => enableSilenceReconnect = value; } private int autoReconnectCount = 3; /// /// 自动重连次数,到达次数后,连接断开 PeerDisconnect,默认 3 次 /// public int AutoReconnectCount { get => autoReconnectCount; set => autoReconnectCount = value; } private float reconnectTimeoutTime = 10; /// /// 每次重连超时时间,默认 10s;共尝试AutoReconnectCount次 /// public float ReconnectTimeoutTime { get => reconnectTimeoutTime; set => reconnectTimeoutTime = value; } private float reconnectBaseInterval = 5; /// /// 每次重连尝试的间隔时间,默认5s /// public float ReconnectBaseInterval { get => reconnectBaseInterval; set => reconnectBaseInterval = value; } private bool enableHeartBeat = true; /// /// 是否启用心跳包,默认启用; /// 静默心跳包可以在后台发送,如果没有特别明确的需求,应该启用 /// public bool EnableHeartBeat { get => enableHeartBeat; set => enableHeartBeat = value; } private float heartBeatInterval = 30f; /// /// 心跳间隔,默认30s,需要和服务器统一 /// public float HeartBeatInterval { get => heartBeatInterval; set => heartBeatInterval = value; } private int maxHeartBeatMissCount = 3; /// /// 1. 丢失心跳包的最大数量,默认3次 /// 2. 超过最大数量后,进行重连; /// 3. 重连失败后,抛出PeerDisconnect消息,应用层处理(应用层应该调用close关闭连接) /// public int MaxHeartBeatMissCount { get => maxHeartBeatMissCount; set => maxHeartBeatMissCount = value; } /// ///网络状态的统计(BI有需要上传一些网络状态数据), 暂时没有使用,为后续ULog启用的标识 /// private bool enableStatistics = false; public bool EnableStatistics { get => enableStatistics; set => enableStatistics = value; } private float connectTimeout = 30; /// /// Connect 超时时间, 默认30s, /// 连接超时后会先抛出 NetErrorCode.PeerConnectTimeout,然后抛出NetErrorCode.PeerDisconnect /// public float ConnectTimeout { get => connectTimeout; set => connectTimeout = value; } public NetConnectConfiguration(NetServiceType serviceType, string uniqueIdentifier) { this.serviceType = serviceType; this.uniqueIdentifier = uniqueIdentifier; } /// /// Enables receiving of the specified type of message /// public void EnableMessageType(NetIncomingMessageType type) { disabledMessageTypes &= (~type); } /// /// Disables receiving of the specified type of message /// public void DisableMessageType(NetIncomingMessageType type) { disabledMessageTypes |= type; } /// /// Gets if receiving of the specified type of message is enabled /// public bool IsMessageTypeEnabled(NetIncomingMessageType type) { return (disabledMessageTypes & type) != type; } } }