messageing

package
v0.0.0-...-3192b2a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2022 License: MIT Imports: 15 Imported by: 1

Documentation

Index

Constants

View Source
const (
	ExpectResponse   uint16 = 0b0001
	NoAutoRequestAck uint16 = 0b0010
	None             uint16 = 0b0000
)

Variables

View Source
var ConfigMrpDefaultActiveRetryInterval int64 = 300
View Source
var ConfigMrpDefaultIdleRetryInterval int64 = 5000

Functions

func DefaultOnMessageReceived

func DefaultOnMessageReceived(c *ExchangeContext, id protocols.Id, messageType uint8, messageCounter uint32, payload *system.PacketBufferHandle)

func GetRetransmissionTimeout

func GetRetransmissionTimeout(activeRetransTimeout time.Duration, idleRetransTimeout time.Duration, lastActivityTime time.Time, activeTime time.Duration) time.Duration

func InitDataModelHandler

func InitDataModelHandler(mgr ExchangeManagerBase)

func SendMessage

func SendMessage(dispatch ExchangeMessageDispatch,
	sessionManager *transport.SessionManager,
	sessionHandle *transport.SessionHandle,
	exchangeId uint16,
	isInitiator bool,
	reliableMessageContext *ReliableMessageContext,
	isReliableTransmission bool,
	protocolsId protocols.Id,
	msgType uint8,
	message []byte) error

Types

type AnyMessage

type AnyMessage uint8
const KAnyMessageType AnyMessage = 0xFF

func (AnyMessage) Matches

func (a AnyMessage) Matches(m uint8) bool

func (AnyMessage) MessageType

func (a AnyMessage) MessageType() uint8

func (AnyMessage) Name

func (a AnyMessage) Name() string

type ApplicationExchangeDispatch

type ApplicationExchangeDispatch struct {
}

func DefaultApplicationExchangeDispatch

func DefaultApplicationExchangeDispatch() *ApplicationExchangeDispatch

func (*ApplicationExchangeDispatch) IsEncryptionRequired

func (a *ApplicationExchangeDispatch) IsEncryptionRequired() bool

func (*ApplicationExchangeDispatch) IsReliableTransmissionAllowed

func (a *ApplicationExchangeDispatch) IsReliableTransmissionAllowed() bool

func (*ApplicationExchangeDispatch) MessagePermitted

func (a *ApplicationExchangeDispatch) MessagePermitted(protocol protocols.Id, messageType uint8) bool

func (*ApplicationExchangeDispatch) SendMessage

func (a *ApplicationExchangeDispatch) SendMessage(
	mgr *transport.SessionManager,
	handle *transport.SessionHandle,
	exchangeId uint16,
	isInitiator bool,
	rmc *ReliableMessageContext,
	isReliableTransmission bool,
	protocol protocols.Id,
	msgType uint8,
	message []byte) error

type EphemeralExchangeDispatch

type EphemeralExchangeDispatch struct {
	// contains filtered or unexported fields
}

func DefaultEphemeralDispatch

func DefaultEphemeralDispatch() *EphemeralExchangeDispatch

func (*EphemeralExchangeDispatch) IsEncryptionRequired

func (e *EphemeralExchangeDispatch) IsEncryptionRequired() bool

func (*EphemeralExchangeDispatch) IsReliableTransmissionAllowed

func (e *EphemeralExchangeDispatch) IsReliableTransmissionAllowed() bool

func (*EphemeralExchangeDispatch) MessagePermitted

func (e *EphemeralExchangeDispatch) MessagePermitted(protocol protocols.Id, messageType uint8) bool

func (*EphemeralExchangeDispatch) SendMessage

func (e *EphemeralExchangeDispatch) SendMessage(
	mgr *transport.SessionManager,
	handle *transport.SessionHandle,
	exchangeId uint16,
	isInitiator bool,
	rmc *ReliableMessageContext,
	isReliableTransmission bool,
	protocol protocols.Id,
	msgType uint8,
	message []byte) error

type ExchangeContext

type ExchangeContext struct {
	*ReliableMessageContext

	*lib.ReferenceCounted
	// contains filtered or unexported fields
}

func NewExchangeContext

func NewExchangeContext(
	em *ExchangeManager,
	exchangeId uint16,
	session *transport.SessionHandle,
	initiator bool,
	delegate ExchangeDelegate,
	isEphemeralExchange bool,
) *ExchangeContext

func (*ExchangeContext) Delegate

func (c *ExchangeContext) Delegate() ExchangeDelegate

func (*ExchangeContext) DoClose

func (c *ExchangeContext) DoClose(clearRetransTable bool)

func (*ExchangeContext) ExchangeId

func (c *ExchangeContext) ExchangeId() uint16

func (*ExchangeContext) ExchangeMgr

func (c *ExchangeContext) ExchangeMgr() *ExchangeManager

func (*ExchangeContext) GetMessageDispatch

func (c *ExchangeContext) GetMessageDispatch(isEphemeralExchange bool,
	delegate ExchangeDelegate) ExchangeMessageDispatch

func (*ExchangeContext) HandleMessage

func (c *ExchangeContext) HandleMessage(messageCounter uint32, payloadHeader *raw.PayloadHeader, f uint32, buf *system.PacketBufferHandle) error

func (*ExchangeContext) HasSessionHandle

func (c *ExchangeContext) HasSessionHandle() bool

func (*ExchangeContext) LogValue

func (c *ExchangeContext) LogValue() log.Value

func (*ExchangeContext) MatchExchange

func (c *ExchangeContext) MatchExchange(session *transport.SessionHandle,
	packetHeader *raw.PacketHeader,
	payloadHeader *raw.PayloadHeader) bool

func (*ExchangeContext) OnSessionReleased

func (c *ExchangeContext) OnSessionReleased()

func (*ExchangeContext) Released

func (c *ExchangeContext) Released()

func (*ExchangeContext) SendMessage

func (c *ExchangeContext) SendMessage(msgType MessageType, msg []byte, sendFlags bitflags.Flags[uint16]) (err error)

func (*ExchangeContext) SessionHandle

func (c *ExchangeContext) SessionHandle() *transport.SessionHandle

func (*ExchangeContext) SetDelegate

func (c *ExchangeContext) SetDelegate(delegate ExchangeDelegate)

func (*ExchangeContext) SetResponseTimeout

func (c *ExchangeContext) SetResponseTimeout(timeout time.Duration)

func (*ExchangeContext) UseSuggestedResponseTimeout

func (c *ExchangeContext) UseSuggestedResponseTimeout(applicationProcessingTimeout time.Duration)

func (*ExchangeContext) WillSendMessage

func (c *ExchangeContext) WillSendMessage()

type ExchangeContextPool

type ExchangeContextPool struct {
	// contains filtered or unexported fields
}

func NewExchangeContextContainer

func NewExchangeContextContainer() *ExchangeContextPool

func (*ExchangeContextPool) Allocated

func (c *ExchangeContextPool) Allocated() int

func (*ExchangeContextPool) CloseContextForDelegate

func (c *ExchangeContextPool) CloseContextForDelegate(delegate ExchangeDelegate)

func (*ExchangeContextPool) Get

func (*ExchangeContextPool) MatchExchange

func (c *ExchangeContextPool) MatchExchange(
	session *transport.SessionHandle,
	packetHeader *raw.PacketHeader,
	payloadHeader *raw.PayloadHeader,
) *ExchangeContext

func (*ExchangeContextPool) Release

func (c *ExchangeContextPool) Release(ctx *ExchangeContext)

type ExchangeDelegate

type ExchangeDelegate interface {
	OnMessageReceived(context *ExchangeContext, header *raw.PayloadHeader, data *system.PacketBufferHandle) error
	OnResponseTimeout(ec *ExchangeContext)
	OnExchangeClosing(ec *ExchangeContext)
	GetMessageDispatch() ExchangeMessageDispatch
}

type ExchangeHandle

type ExchangeHandle struct {
	*ExchangeContext
}

type ExchangeManager

type ExchangeManager struct {
	// contains filtered or unexported fields
}

func NewExchangeManager

func NewExchangeManager() *ExchangeManager

func (*ExchangeManager) CloseAllContextForDelegate

func (e *ExchangeManager) CloseAllContextForDelegate(delegate ExchangeDelegate)

func (*ExchangeManager) GetMessageDispatch

func (e *ExchangeManager) GetMessageDispatch() ExchangeMessageDispatch

func (*ExchangeManager) GetNumActiveExchanges

func (e *ExchangeManager) GetNumActiveExchanges() int

func (*ExchangeManager) Init

func (e *ExchangeManager) Init(sessionManager *transport.SessionManager) error

func (*ExchangeManager) NewContext

func (e *ExchangeManager) NewContext(session *transport.SessionHandle, delegate ExchangeDelegate, isInitiator bool) *ExchangeContext

func (*ExchangeManager) OnExchangeClosing

func (e *ExchangeManager) OnExchangeClosing(ec *ExchangeContext)

func (*ExchangeManager) OnMessageReceived

func (e *ExchangeManager) OnMessageReceived(
	packetHeader *raw.PacketHeader,
	payloadHeader *raw.PayloadHeader,
	ss *transport.SessionHandle,
	isDuplicate bool,
	msg *system.PacketBufferHandle,
)

func (*ExchangeManager) OnResponseTimeout

func (e *ExchangeManager) OnResponseTimeout(ec *ExchangeContext)

func (*ExchangeManager) RegisterUnsolicitedMessageHandlerForProtocol

func (e *ExchangeManager) RegisterUnsolicitedMessageHandlerForProtocol(
	protocolId protocols.Id,
	handler UnsolicitedMessageHandler,
) error

func (*ExchangeManager) RegisterUnsolicitedMessageHandlerForType

func (e *ExchangeManager) RegisterUnsolicitedMessageHandlerForType(id protocols.Id, msgType MessageType, handler UnsolicitedMessageHandler) error

func (*ExchangeManager) ReleaseContext

func (e *ExchangeManager) ReleaseContext(ctx *ExchangeContext)

func (*ExchangeManager) ReliableMessageMgr

func (e *ExchangeManager) ReliableMessageMgr() *ReliableMessageMgr

func (*ExchangeManager) SessionManager

func (e *ExchangeManager) SessionManager() *transport.SessionManager

func (*ExchangeManager) Shutdown

func (e *ExchangeManager) Shutdown()

func (*ExchangeManager) UnregisterUnsolicitedMessageHandlerForProtocol

func (e *ExchangeManager) UnregisterUnsolicitedMessageHandlerForProtocol(id protocols.Id) error

func (*ExchangeManager) UnregisterUnsolicitedMessageHandlerForType

func (e *ExchangeManager) UnregisterUnsolicitedMessageHandlerForType(id protocols.Id, messageType MessageType) error

type ExchangeManagerBase

type ExchangeManagerBase interface {
	// SessionMessageDelegate the delegate for transport session manager
	transport.SessionMessageDelegate
	SessionManager() *transport.SessionManager
	RegisterUnsolicitedMessageHandlerForProtocol(protocolId protocols.Id, handler UnsolicitedMessageHandler) error
	RegisterUnsolicitedMessageHandlerForType(protocolId protocols.Id, msgType MessageType, handler UnsolicitedMessageHandler) error
	UnregisterUnsolicitedMessageHandlerForType(id protocols.Id, messageType MessageType) error
	UnregisterUnsolicitedMessageHandlerForProtocol(id protocols.Id) error
	OnResponseTimeout(ec *ExchangeContext)
	OnExchangeClosing(ec *ExchangeContext)
	GetMessageDispatch() ExchangeMessageDispatch
	ReleaseContext(ctx *ExchangeContext)
	Shutdown()
}

type ExchangeMessageDispatch

type ExchangeMessageDispatch interface {
	IsEncryptionRequired() bool
	SendMessage(mgr *transport.SessionManager, handle *transport.SessionHandle, exchangeId uint16, isInitiator bool, rmc *ReliableMessageContext, isReliableTransmission bool, protocol protocols.Id, msgType uint8, message []byte) error
	IsReliableTransmissionAllowed() bool
	MessagePermitted(id protocols.Id, messageType uint8) bool
}

type ExchangeSessionHolder

type ExchangeSessionHolder struct {
	*transport.SessionHolderWithDelegate
}

func NewExchangeSessionHolder

func NewExchangeSessionHolder(delegate *ExchangeContext) *ExchangeSessionHolder

func (*ExchangeSessionHolder) GrabExpiredSession

func (s *ExchangeSessionHolder) GrabExpiredSession(ss *transport.SessionHandle)

GrabExpiredSession 抓取过期会话

type MessageType

type MessageType interface {
	String() string
	MessageType() uint8
	ProtocolId() protocols.Id
}

type ReliableMessageContext

type ReliableMessageContext struct {
	// contains filtered or unexported fields
}

func NewReliableMessageContext

func NewReliableMessageContext(ec *ExchangeContext) *ReliableMessageContext

func (*ReliableMessageContext) AutoRequestAck

func (c *ReliableMessageContext) AutoRequestAck() bool

func (*ReliableMessageContext) FlushAcks

func (c *ReliableMessageContext) FlushAcks() error

func (*ReliableMessageContext) HandleNeedsAck

func (c *ReliableMessageContext) HandleNeedsAck(messageCounter, flags uint32)

func (*ReliableMessageContext) HandleRcvdAck

func (c *ReliableMessageContext) HandleRcvdAck(ackMessageCounter uint32)

func (*ReliableMessageContext) HasPiggybackAckPending

func (c *ReliableMessageContext) HasPiggybackAckPending() bool

func (*ReliableMessageContext) IsEphemeralExchange

func (c *ReliableMessageContext) IsEphemeralExchange() bool

func (*ReliableMessageContext) IsRequestingActiveMode

func (c *ReliableMessageContext) IsRequestingActiveMode() bool

func (*ReliableMessageContext) ReliableMessageMgr

func (c *ReliableMessageContext) ReliableMessageMgr() *ReliableMessageMgr

func (*ReliableMessageContext) SetAckPending

func (c *ReliableMessageContext) SetAckPending(inAckPending bool)

func (*ReliableMessageContext) SetAutoRequestAck

func (c *ReliableMessageContext) SetAutoRequestAck(autoReqAck bool)

func (*ReliableMessageContext) SetMessageNotAcked

func (c *ReliableMessageContext) SetMessageNotAcked(messageNotAcked bool)

func (*ReliableMessageContext) SetRequestingActiveMode

func (c *ReliableMessageContext) SetRequestingActiveMode(activeMode bool)

func (*ReliableMessageContext) ShouldIgnoreSessionRelease

func (c *ReliableMessageContext) ShouldIgnoreSessionRelease() bool

func (*ReliableMessageContext) TakePendingPeerAckMessageCounter

func (c *ReliableMessageContext) TakePendingPeerAckMessageCounter() uint32

type ReliableMessageMgr

type ReliableMessageMgr struct {
	// contains filtered or unexported fields
}

func (*ReliableMessageMgr) AddToRetransTable

func (m *ReliableMessageMgr) AddToRetransTable(rc *ReliableMessageContext) (entry *RetransTableEntry, err error)

func (*ReliableMessageMgr) CheckAndRemRetransTable

func (m *ReliableMessageMgr) CheckAndRemRetransTable(rc *ReliableMessageContext, ackMessageCounter uint32) bool

func (*ReliableMessageMgr) ClearRetransTable

func (m *ReliableMessageMgr) ClearRetransTable(rc *ReliableMessageContext)

func (*ReliableMessageMgr) ClearRetransTableEntry

func (m *ReliableMessageMgr) ClearRetransTableEntry(re *RetransTableEntry) *RetransTableEntry

type ReliableMessageProtocolConfig

type ReliableMessageProtocolConfig struct {
	IdleRetransTimeout   time.Duration
	ActiveRetransTimeout time.Duration
}

func DefaultMRPConfig

func DefaultMRPConfig() *ReliableMessageProtocolConfig

func GetLocalMRPConfig

func GetLocalMRPConfig() *ReliableMessageProtocolConfig

func (ReliableMessageProtocolConfig) Init

type RetransTableEntry

type RetransTableEntry struct {
	// contains filtered or unexported fields
}

func NewRetransTableEntry

func NewRetransTableEntry(rc *ReliableMessageContext) *RetransTableEntry

type UnsolicitedMessageHandler

type UnsolicitedMessageHandler interface {
	OnUnsolicitedMessageReceived(header *raw.PayloadHeader) (ExchangeDelegate, error)
	OnExchangeCreationFailed(delegate ExchangeDelegate)
}

type UnsolicitedMessageHandlerSlot

type UnsolicitedMessageHandlerSlot struct {
	// contains filtered or unexported fields
}

func (*UnsolicitedMessageHandlerSlot) IsInUse

func (slot *UnsolicitedMessageHandlerSlot) IsInUse() bool

func (*UnsolicitedMessageHandlerSlot) Matches

func (slot *UnsolicitedMessageHandlerSlot) Matches(aProtocolId protocols.Id, aMessageType uint8) bool

func (*UnsolicitedMessageHandlerSlot) Reset

func (slot *UnsolicitedMessageHandlerSlot) Reset()

Directories

Path Synopsis
raw

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL