feat(notify): 重构通信内核并补齐 stream/bulk/record/transfer 能力
- 引入 LogicalConn/TransportConn 分层,ClientConn 保留兼容适配层 - 新增 Stream、Bulk、RecordStream 三条数据面能力及对应控制路径 - 完成 transfer/file 传输内核与状态快照、诊断能力 - 补齐 reconnect、inbound dispatcher、modern psk 等基础模块 - 增加大规模回归、并发与基准测试覆盖 - 更新依赖库
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
package notify
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
|
||||
type StreamSnapshot struct {
|
||||
ID string
|
||||
DataID uint64
|
||||
Scope string
|
||||
Channel StreamChannel
|
||||
Metadata StreamMetadata
|
||||
BindingOwner string
|
||||
BindingAlive bool
|
||||
BindingCurrent bool
|
||||
BindingReason string
|
||||
BindingError string
|
||||
SessionEpoch uint64
|
||||
LogicalClientID string
|
||||
LocalAddress string
|
||||
RemoteAddress string
|
||||
TransportGeneration uint64
|
||||
TransportAttached bool
|
||||
TransportHasRuntimeConn bool
|
||||
TransportCurrent bool
|
||||
TransportDetachReason string
|
||||
TransportDetachKind string
|
||||
TransportDetachGeneration uint64
|
||||
TransportDetachError string
|
||||
TransportDetachedAt time.Time
|
||||
ReattachEligible bool
|
||||
LocalClosed bool
|
||||
LocalReadClosed bool
|
||||
RemoteClosed bool
|
||||
PeerReadClosed bool
|
||||
BufferedChunks int
|
||||
BufferedBytes int
|
||||
ReadTimeout time.Duration
|
||||
WriteTimeout time.Duration
|
||||
BytesRead int64
|
||||
BytesWritten int64
|
||||
ReadCalls int64
|
||||
WriteCalls int64
|
||||
OpenedAt time.Time
|
||||
LastReadAt time.Time
|
||||
LastWriteAt time.Time
|
||||
ReadDeadline time.Time
|
||||
WriteDeadline time.Time
|
||||
ResetError string
|
||||
}
|
||||
|
||||
type clientStreamSnapshotReader interface {
|
||||
clientStreamSnapshots() []StreamSnapshot
|
||||
}
|
||||
|
||||
type serverStreamSnapshotReader interface {
|
||||
serverStreamSnapshots() []StreamSnapshot
|
||||
}
|
||||
|
||||
var (
|
||||
errClientStreamSnapshotNil = errors.New("client stream snapshot target is nil")
|
||||
errServerStreamSnapshotNil = errors.New("server stream snapshot target is nil")
|
||||
errClientStreamSnapshotUnsupported = errors.New("client stream snapshot target type is unsupported")
|
||||
errServerStreamSnapshotUnsupported = errors.New("server stream snapshot target type is unsupported")
|
||||
)
|
||||
|
||||
func GetClientStreamSnapshots(c Client) ([]StreamSnapshot, error) {
|
||||
if c == nil {
|
||||
return nil, errClientStreamSnapshotNil
|
||||
}
|
||||
reader, ok := any(c).(clientStreamSnapshotReader)
|
||||
if !ok {
|
||||
return nil, errClientStreamSnapshotUnsupported
|
||||
}
|
||||
return reader.clientStreamSnapshots(), nil
|
||||
}
|
||||
|
||||
func GetServerStreamSnapshots(s Server) ([]StreamSnapshot, error) {
|
||||
if s == nil {
|
||||
return nil, errServerStreamSnapshotNil
|
||||
}
|
||||
reader, ok := any(s).(serverStreamSnapshotReader)
|
||||
if !ok {
|
||||
return nil, errServerStreamSnapshotUnsupported
|
||||
}
|
||||
return reader.serverStreamSnapshots(), nil
|
||||
}
|
||||
|
||||
func (c *ClientCommon) clientStreamSnapshots() []StreamSnapshot {
|
||||
return streamSnapshotsFromRuntime(c.getStreamRuntime())
|
||||
}
|
||||
|
||||
func (s *ServerCommon) serverStreamSnapshots() []StreamSnapshot {
|
||||
return streamSnapshotsFromRuntime(s.getStreamRuntime())
|
||||
}
|
||||
|
||||
func streamSnapshotsFromRuntime(runtime *streamRuntime) []StreamSnapshot {
|
||||
if runtime == nil {
|
||||
return nil
|
||||
}
|
||||
return runtime.snapshots()
|
||||
}
|
||||
|
||||
func sortStreamSnapshots(src []StreamSnapshot) {
|
||||
sort.Slice(src, func(i, j int) bool {
|
||||
if src[i].Scope != src[j].Scope {
|
||||
return src[i].Scope < src[j].Scope
|
||||
}
|
||||
if src[i].ID != src[j].ID {
|
||||
return src[i].ID < src[j].ID
|
||||
}
|
||||
if src[i].DataID != src[j].DataID {
|
||||
return src[i].DataID < src[j].DataID
|
||||
}
|
||||
if src[i].TransportGeneration != src[j].TransportGeneration {
|
||||
return src[i].TransportGeneration < src[j].TransportGeneration
|
||||
}
|
||||
return src[i].Channel < src[j].Channel
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user