Documentation
¶
Index ¶
- Constants
- func GenerateMessageID() string
- func MessageTypeToString(messageType int64) string
- func MessageWrap(msg *Message) ([]byte, error)
- func RequiresAcknowledgment(messageType int64) bool
- type AckManager
- func (am *AckManager) Close()
- func (am *AckManager) GetPendingMessage(messageID string) *Message
- func (am *AckManager) GetTimeoutMessages() []*PendingAck
- func (am *AckManager) PendingCount() int
- func (am *AckManager) ProcessAcknowledgment(ackMsg *AckMessage) bool
- func (am *AckManager) TrackMessage(msg *Message)
- type AckMessage
- type ActionBuilder
- type ActionData
- type AuthBuilder
- type AuthData
- type ChatBuilder
- type ChatData
- type Message
- type MessageBuilder
- func (b *MessageBuilder) Build() *Message
- func (b *MessageBuilder) NoAck() *MessageBuilder
- func (b *MessageBuilder) RequireAck(timeout time.Duration) *MessageBuilder
- func (b *MessageBuilder) WithContent(data interface{}) *MessageBuilder
- func (b *MessageBuilder) WithID(id string) *MessageBuilder
- func (b *MessageBuilder) WithRawContent(data []byte) *MessageBuilder
- func (b *MessageBuilder) WithStringContent(text string) *MessageBuilder
- func (b *MessageBuilder) WithTimeout(timeout time.Duration) *MessageBuilder
- type MessageError
- type MessageHandler
- type MessageRouter
- type MessageValidator
- type MoveBuilder
- type MoveData
- type PendingAck
- type RoomBuilder
- type RoomData
- type StatusBuilder
- func (b *StatusBuilder) AtLocation(location string) *StatusBuilder
- func (b *StatusBuilder) WithHealth(health int) *StatusBuilder
- func (b *StatusBuilder) WithInventory(items []string) *StatusBuilder
- func (b *StatusBuilder) WithLevel(level int) *StatusBuilder
- func (b *StatusBuilder) WithMana(mana int) *StatusBuilder
- func (b *StatusBuilder) WithStats(stats map[string]interface{}) *StatusBuilder
- func (b *StatusBuilder) WithStatus(status string) *StatusBuilder
- type StatusData
Constants ¶
const ( DefaultAckTimeout = 30 * time.Second MaxRetries = 3 // For high-load scenarios, reduce timeout to prevent accumulation HighLoadAckTimeout = 10 * time.Second )
const ( // System messages MessageTypeHeartbeat int64 = iota MessageTypeConnect MessageTypeDisconnect MessageTypeError MessageTypeAck MessageTypeNack // Authentication messages MessageTypeAuth MessageTypeAuthSuccess MessageTypeAuthFailure // Chat messages MessageTypeChat MessageTypeWhisper MessageTypeBroadcast MessageTypeJoinRoom MessageTypeLeaveRoom // Game messages MessageTypeMove MessageTypeAction MessageTypeStatus MessageTypeInventory // Custom messages start here MessageTypeCustom = 1000 )
Message type constants for common message types
Variables ¶
This section is empty.
Functions ¶
func GenerateMessageID ¶
func GenerateMessageID() string
GenerateMessageID generates a unique message ID
func MessageTypeToString ¶
MessageTypeToString returns a human-readable string for a message type
func MessageWrap ¶
func RequiresAcknowledgment ¶
RequiresAcknowledgment returns true if the given message type typically requires acknowledgment
Types ¶
type AckManager ¶
type AckManager struct {
// contains filtered or unexported fields
}
AckManager handles message acknowledgment tracking
func NewAckManager ¶
func NewAckManager() *AckManager
NewAckManager creates a new acknowledgment manager
func (*AckManager) Close ¶
func (am *AckManager) Close()
Close shuts down the acknowledgment manager
func (*AckManager) GetPendingMessage ¶
func (am *AckManager) GetPendingMessage(messageID string) *Message
GetPendingMessage returns a pending message by ID
func (*AckManager) GetTimeoutMessages ¶
func (am *AckManager) GetTimeoutMessages() []*PendingAck
GetTimeoutMessages returns messages that have timed out and need retry/failure handling
func (*AckManager) PendingCount ¶
func (am *AckManager) PendingCount() int
PendingCount returns the number of messages awaiting acknowledgment
func (*AckManager) ProcessAcknowledgment ¶
func (am *AckManager) ProcessAcknowledgment(ackMsg *AckMessage) bool
ProcessAcknowledgment processes an incoming acknowledgment
func (*AckManager) TrackMessage ¶
func (am *AckManager) TrackMessage(msg *Message)
TrackMessage starts tracking a message for acknowledgment
type AckMessage ¶
type AckMessage struct {
MessageID string
Success bool
Error string // Optional error message for NACK
}
AckMessage represents an acknowledgment message
func ParseAckMessage ¶
func ParseAckMessage(msg *Message) (*AckMessage, error)
ParseAckMessage parses the contents of an acknowledgment message
type ActionBuilder ¶
type ActionBuilder struct {
*MessageBuilder
}
ActionBuilder provides specialized building for game action messages
func (*ActionBuilder) Do ¶
func (b *ActionBuilder) Do(action string) *ActionBuilder
Do sets the action to perform
func (*ActionBuilder) OnTarget ¶
func (b *ActionBuilder) OnTarget(target string) *ActionBuilder
OnTarget sets the target of the action
func (*ActionBuilder) WithArgs ¶
func (b *ActionBuilder) WithArgs(args map[string]interface{}) *ActionBuilder
WithArgs sets action arguments
type ActionData ¶
type AuthBuilder ¶
type AuthBuilder struct {
*MessageBuilder
}
AuthBuilder provides specialized building for authentication messages
func (*AuthBuilder) AsGuest ¶
func (b *AuthBuilder) AsGuest(username string) *AuthBuilder
AsGuest sets guest authentication
func (*AuthBuilder) WithCredentials ¶
func (b *AuthBuilder) WithCredentials(username, password string) *AuthBuilder
WithCredentials sets username/password authentication
func (*AuthBuilder) WithToken ¶
func (b *AuthBuilder) WithToken(username, token string) *AuthBuilder
WithToken sets token-based authentication
type AuthData ¶
type AuthData struct {
Username string `cbor:"username"`
Password string `cbor:"password,omitempty"`
Token string `cbor:"token,omitempty"`
Method string `cbor:"method"` // "password", "token", "guest"
}
Common data structures for message content
type ChatBuilder ¶
type ChatBuilder struct {
*MessageBuilder
}
ChatBuilder provides specialized building for chat messages
func (*ChatBuilder) FromUser ¶
func (b *ChatBuilder) FromUser(username string) *ChatBuilder
FromUser sets the sender username
func (*ChatBuilder) InChannel ¶
func (b *ChatBuilder) InChannel(channel string) *ChatBuilder
InChannel sets the channel for the message
func (*ChatBuilder) ToUser ¶
func (b *ChatBuilder) ToUser(username string) *ChatBuilder
ToUser sets the target user for whispers
func (*ChatBuilder) WithText ¶
func (b *ChatBuilder) WithText(text string) *ChatBuilder
WithText sets the chat message text
type Message ¶
type Message struct {
Type int64
Contents []byte
ID string // Unique message ID for acknowledgment tracking
RequiresAck bool // Whether this message requires acknowledgment
AckTimeout time.Duration // How long to wait for acknowledgment before retry/fail
}
Messages are constrained to be an int64 and can be mapped to an enum or whatnot, but is designed for fast switching of handlers Contents can be anything, but we provide helpers for CBOR messages, dual layered
func CreateAckMessage ¶
CreateAckMessage creates an acknowledgment message for the given message ID
func MessageUnwrap ¶
type MessageBuilder ¶
type MessageBuilder struct {
// contains filtered or unexported fields
}
MessageBuilder provides a fluent API for building messages
func NewMessage ¶
func NewMessage(messageType int64) *MessageBuilder
NewMessage creates a new message builder
func (*MessageBuilder) Build ¶
func (b *MessageBuilder) Build() *Message
Build returns the constructed message
func (*MessageBuilder) NoAck ¶
func (b *MessageBuilder) NoAck() *MessageBuilder
NoAck disables acknowledgment requirement
func (*MessageBuilder) RequireAck ¶
func (b *MessageBuilder) RequireAck(timeout time.Duration) *MessageBuilder
RequireAck enables acknowledgment requirement
func (*MessageBuilder) WithContent ¶
func (b *MessageBuilder) WithContent(data interface{}) *MessageBuilder
WithContent sets the message content (automatically CBOR encoded)
func (*MessageBuilder) WithID ¶
func (b *MessageBuilder) WithID(id string) *MessageBuilder
WithID sets a custom message ID
func (*MessageBuilder) WithRawContent ¶
func (b *MessageBuilder) WithRawContent(data []byte) *MessageBuilder
WithRawContent sets raw byte content without encoding
func (*MessageBuilder) WithStringContent ¶
func (b *MessageBuilder) WithStringContent(text string) *MessageBuilder
WithStringContent sets string content as bytes
func (*MessageBuilder) WithTimeout ¶
func (b *MessageBuilder) WithTimeout(timeout time.Duration) *MessageBuilder
WithTimeout sets acknowledgment timeout
type MessageError ¶
MessageError represents an error in message processing
func (*MessageError) Error ¶
func (e *MessageError) Error() string
type MessageHandler ¶
type MessageRouter ¶
type MessageRouter struct {
// contains filtered or unexported fields
}
MessageRouter handles routing messages to appropriate handlers
func NewMessageRouter ¶
func NewMessageRouter() *MessageRouter
NewMessageRouter creates a new message router
func (*MessageRouter) RegisterHandler ¶
func (r *MessageRouter) RegisterHandler(messageType int64, handler MessageHandler)
RegisterHandler registers a handler for a specific message type
func (*MessageRouter) RegisterValidator ¶
func (r *MessageRouter) RegisterValidator(messageType int64, validator MessageValidator)
RegisterValidator registers a validator for a specific message type
func (*MessageRouter) RouteMessage ¶
func (r *MessageRouter) RouteMessage(msg *Message) error
RouteMessage routes a message to the appropriate handler
type MessageValidator ¶
type MoveBuilder ¶
type MoveBuilder struct {
*MessageBuilder
}
MoveBuilder provides specialized building for movement messages
func (*MoveBuilder) InDirection ¶
func (b *MoveBuilder) InDirection(direction string) *MoveBuilder
InDirection sets directional movement
func (*MoveBuilder) ToCoordinates ¶
func (b *MoveBuilder) ToCoordinates(x, y, z int) *MoveBuilder
ToCoordinates sets coordinate-based movement
func (*MoveBuilder) ToRoom ¶
func (b *MoveBuilder) ToRoom(roomID string) *MoveBuilder
ToRoom sets room-based movement
type PendingAck ¶
PendingAck tracks messages waiting for acknowledgment
type RoomBuilder ¶
type RoomBuilder struct {
*MessageBuilder
}
RoomBuilder provides specialized building for room messages
func (*RoomBuilder) Room ¶
func (b *RoomBuilder) Room(roomID string, roomName ...string) *RoomBuilder
Room sets the room ID and optional name
func (*RoomBuilder) WithPassword ¶
func (b *RoomBuilder) WithPassword(password string) *RoomBuilder
WithPassword sets room password
type StatusBuilder ¶
type StatusBuilder struct {
*MessageBuilder
}
StatusBuilder provides specialized building for status messages
func (*StatusBuilder) AtLocation ¶
func (b *StatusBuilder) AtLocation(location string) *StatusBuilder
AtLocation sets location
func (*StatusBuilder) WithHealth ¶
func (b *StatusBuilder) WithHealth(health int) *StatusBuilder
WithHealth sets health value
func (*StatusBuilder) WithInventory ¶
func (b *StatusBuilder) WithInventory(items []string) *StatusBuilder
WithInventory sets inventory items
func (*StatusBuilder) WithLevel ¶
func (b *StatusBuilder) WithLevel(level int) *StatusBuilder
WithLevel sets level value
func (*StatusBuilder) WithMana ¶
func (b *StatusBuilder) WithMana(mana int) *StatusBuilder
WithMana sets mana value
func (*StatusBuilder) WithStats ¶
func (b *StatusBuilder) WithStats(stats map[string]interface{}) *StatusBuilder
WithStats sets additional stats
func (*StatusBuilder) WithStatus ¶
func (b *StatusBuilder) WithStatus(status string) *StatusBuilder
WithStatus sets status string
type StatusData ¶
type StatusData struct {
Health int `cbor:"health,omitempty"`
Mana int `cbor:"mana,omitempty"`
Level int `cbor:"level,omitempty"`
Location string `cbor:"location,omitempty"`
Status string `cbor:"status,omitempty"` // "idle", "fighting", "moving"
Inventory []string `cbor:"inventory,omitempty"`
Stats map[string]interface{} `cbor:"stats,omitempty"`
}