func CopyUser(user *User) map[string]interface{}
CopyUser Copies a user struct for transferring user client data to another node
userData *User - User to be copied as a map[string]interface{}.
func DiscardUser(reliableClientAddr string, sid string)
DiscardUser Deletes a user data. Either reliableClientAddr or SID to be used.
NOTE: Newer version of the clients use SID instead of the client address.
reliableClientAddr string - Client address of the user to be discarded. sid string - User SID of the user to be discarded.
func GetCCU() int
GetCCU returns concurrent users of the node
func New(data map[string]interface{}, initTTL int64) (map[string]interface{}, error)
New [INTERNAL USE ONLY] handle mesh network command sent from HTTP if initTTL is greater than 0, it will be used as the initial TTL (in seconds) if initTTL is 0 or less, config TTL * 3 will be used as the initial TTL (in seconds)
func OnDiscard(callback func(string, *User))
OnDiscard Registers a callback on user data deletion
callback func(SID string, userData *User) - Callback to be invoked when the target user is deleted.
func OnNew(callback func(*User))
OnNew Registers a callback on user.New()
callback func(newUserData *User) - Callback to be invoked when a new user is created.
func SetTCPState(sid string, state *tcp.State)
SetTCPState [INTERNAL USE ONLY] Sets TCP user state to the user data and updates TTL
sid string - User SID of the target user to updated. state *tcp.State - TCP state to be assigned to the user.
func SetUDPStateAndRUDPConn(sid string, state *udp.State)
SetUDPStateAndRUDPConn [INTERNAL USE ONLY] Sets UDP user state to the user data and updates TTL
sid string - User SID of the target user to updated. state *udp.State - UDP state to be assigned to the user.
func SetUserByID(sid string, user *User, ttl int64) bool
SetUserByID Sets a user data by sid
sid string - User SID to store in the server memory. userData *User - User to be stored. ttl int64 - TTL of the stored user in seconds. This will be extended by using Extend etc.
func SetWSState(sid string, state *ws.State)
SetWSState [INTERNAL USE ONLY] Sets WebSocket state to the user data and updates TTL
sid string - User SID of the target user to updated. state *ws.State - WebSocket state to be assigned to the user.
func SetupAsConnector(ttl int64)
SetupAsConnector Sets up as Connector server
ttl int64 - TTL of the health check in seconds.
func SetupAsTCPServer()
SetupAsTCPServer Sets up as TCP server
func SetupAsUDPServer()
SetupAsUDPServer Sets up as UDP server
func SetupAsWebSocketServer()
SetupAsWebSocketServer Sets up as TCP server
func UpdateUserByID(sid string) bool
UpdateUserByID Updates TTL of user data in the vault
sid string - User SID of the target user to updated.
User User data structure
type User struct { // unique ID to udentify the user by ID string SID string SIDBytes []byte // key value storage - use user.Get() and user.Set() to access this map or should ONLY be used with Update() Data map[string]interface{} Payload []byte // used only by WebSocket as Payload WSData map[string]interface{} WSState *ws.State TCPState *tcp.State UDPState *udp.State RUDPConn *udp.Connection // UDPState is always a new one.. UDPClientKey string // encryption keys EncryptionKey []byte EncryptionIV []byte EncryptionMacKey []byte // reconnect flag Reconnect bool // contains filtered or unexported fields }
func CreateBlankUser(sid, uid string) *User
CreateBlankUser creates an incomplete user to be used as a dummy
Usage Example: Create a dummy user to create an empty room and/or group without actual client.
sid string - Blank user SID. uid string - Blank user ID.
func GetUserByID(sid string) *User
GetUserByID Returns a user by its SID - intended to be used by UDP server
sid string - User SID of the target user.
func (user *User) Disconnect()
Disconnect disconnects the client from the server
func (user *User) Get(key string) interface{}
Get returns a value associated with the key (SID) given
User data must be handled by the user and nobody else, so no race condition... [IMPORTANT] value does NOT support struct. If you need to store a a structured data, please use map instead [IMPORTANT] If you store complex data types such as maps etc... all value type will be interface{} [IMPORTANT] If the value is numeric, the data type may become float64: numInterface := userData.Get("num") // this maybe float64 var num int if numInterface == nil { num = 0 // Get() can return a nil } if _, ok := numInterface.(float64); ok { num = int(numInterface.(float64)) // cast it to be int } else { num = numInterface.(int) } key string - User property key of the value to retrieve.
func (user *User) GetClientAddr() string
GetClientAddr returns the user client address
func (user *User) GetClientKey() string
GetClientKey returns clientKey
func (user *User) OnNewConnection(callback func())
OnNewConnection [INTERNAL USE ONLY]
callback func() - Callback to be invoked when a new user connection is establied with the client.
func (user *User) Push(message []byte, reliable bool)
Push [Deprecated] use ServerPush instead
func (user *User) Respond(message []byte, status uint8, reliable bool)
Respond [Deprecated] use ServerRespond instead
func (user *User) Send(ver uint8, cmd uint16, message []byte, status uint8, reliable bool)
Send [Deprecated] Sends a packet from the server to the target user client with a response status
func (user *User) ServerPush(ver uint8, cmd uint16, message []byte, reliable bool)
ServerPush Sends a push packet from the server to the target user client
ver uint8 - Server push message command version. cmd uint16 - Server push message command ID. message []byte - Message byte array to be sent as a push. reliable bool - If true, UDP will become RUDP.
func (user *User) ServerRespond(message []byte, ver uint8, cmd uint16, status uint8, reliable bool)
ServerRespond sends a packet as a response w/ ver and cmd of your choice
message []byte - Message byte array to be sent as a response. ver uint8 - Server response command version. cmd uint16 - Server response command ID. status uint8 - Server response status. Status consts are avialble in server package. server.Ok (success), server.Bad (error caused by the user), server.Err (error caused by the server). reliable bool - If true, UDP will become RUDP.
func (user *User) Set(key string, value interface{})
Set stores a value along with the key (SID): the value will remain stored until user object is discarded
User data must be handled by the user and nobody else, so no race condition.... [IMPORTANT] value does NOT support struct. If you need to store a a structured data, please use map instead [IMPORTANT] If you store complex data types such as maps etc... all value type will be interface{} key string - Key of the user property to be set. value interface{} - Value of the user property to be set.
func (user *User) ThrottledPush(throttleTime int64, msg []byte, reliable bool)
ThrottledPush [Deprecated] use ThrottledServerPush instead
func (user *User) ThrottledServerPush(throttleTime int64, ver uint8, cmd uint16, msg []byte, reliable bool)
ThrottledServerPush sends a server push packet if the packet sent previously has past throttleTime previously set.
If not, the packet will be "Dropped". throttleTime is in milliseconds.
func (user *User) Update(key string, op func(data interface{}))
Update allows a custom operation function to "update" user data by its key
[IMPORTANT] value does NOT support struct. If you need to store a a structured data, please use map instead [IMPORTANT] If you store complex data types such as maps etc... all value type will be interface{} key string - Key of the user property to be updated. op func(targetPropertyValue interface{}) - Operation function to handle the property update.
func (user *User) WSMessage(ver float64, cmd float64, msg map[string]interface{})
WSMessage sends a WebSocket message to user client. Only available for WebSocket server.
ver float64 - Server message command version. cmd float64 - Server message command ID. msg map[string]interface{} - Server message data to be sent.