message

package
v0.0.0-...-a10a6d9 Latest Latest
Warning

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

Go to latest
Published: Jul 29, 2025 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultAckTimeout = 30 * time.Second
	MaxRetries        = 3

	// For high-load scenarios, reduce timeout to prevent accumulation
	HighLoadAckTimeout = 10 * time.Second
)
View Source
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

func MessageTypeToString(messageType int64) string

MessageTypeToString returns a human-readable string for a message type

func MessageWrap

func MessageWrap(msg *Message) ([]byte, error)

func RequiresAcknowledgment

func RequiresAcknowledgment(messageType int64) bool

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 Action

func Action() *ActionBuilder

Action creates a game action message builder

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 ActionData struct {
	Action string                 `cbor:"action"`
	Target string                 `cbor:"target,omitempty"`
	Args   map[string]interface{} `cbor:"args,omitempty"`
}

type AuthBuilder

type AuthBuilder struct {
	*MessageBuilder
}

AuthBuilder provides specialized building for authentication messages

func Auth

func Auth() *AuthBuilder

Auth creates an authentication message builder

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 Broadcast

func Broadcast() *ChatBuilder

Broadcast creates a broadcast message builder

func Chat

func Chat() *ChatBuilder

Chat creates a chat message builder

func Whisper

func Whisper() *ChatBuilder

Whisper creates a whisper message builder

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 ChatData

type ChatData struct {
	Message  string `cbor:"message"`
	Channel  string `cbor:"channel,omitempty"`
	Target   string `cbor:"target,omitempty"` // For whispers
	Username string `cbor:"username,omitempty"`
}

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

func CreateAckMessage(messageID string, success bool, errorMsg string) *Message

CreateAckMessage creates an acknowledgment message for the given message ID

func Error

func Error(errorMsg string) *Message

Error creates an error message

func Heartbeat

func Heartbeat() *Message

Heartbeat creates a heartbeat message

func MessageUnwrap

func MessageUnwrap(raw []byte) (*Message, error)

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

type MessageError struct {
	Type int64
	Err  string
}

MessageError represents an error in message processing

func (*MessageError) Error

func (e *MessageError) Error() string

type MessageHandler

type MessageHandler func(msg *Message) error

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 MessageValidator func(msg *Message) bool

type MoveBuilder

type MoveBuilder struct {
	*MessageBuilder
}

MoveBuilder provides specialized building for movement messages

func Move

func Move() *MoveBuilder

Move creates a movement message builder

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 MoveData

type MoveData struct {
	Direction string `cbor:"direction"` // "north", "south", "east", "west", "up", "down"
	RoomID    string `cbor:"room_id,omitempty"`
	X         int    `cbor:"x,omitempty"`
	Y         int    `cbor:"y,omitempty"`
	Z         int    `cbor:"z,omitempty"`
}

type PendingAck

type PendingAck struct {
	Message    *Message
	SentAt     time.Time
	RetryCount int
}

PendingAck tracks messages waiting for acknowledgment

type RoomBuilder

type RoomBuilder struct {
	*MessageBuilder
}

RoomBuilder provides specialized building for room messages

func JoinRoom

func JoinRoom() *RoomBuilder

JoinRoom creates a join room message builder

func LeaveRoom

func LeaveRoom() *RoomBuilder

LeaveRoom creates a leave room message builder

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 RoomData

type RoomData struct {
	RoomID   string `cbor:"room_id"`
	RoomName string `cbor:"room_name,omitempty"`
	Password string `cbor:"password,omitempty"`
}

type StatusBuilder

type StatusBuilder struct {
	*MessageBuilder
}

StatusBuilder provides specialized building for status messages

func Status

func Status() *StatusBuilder

Status creates a status message builder

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"`
}

Jump to

Keyboard shortcuts

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