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 DecodeUserData(encoded string) (map[string]interface{}, error)
DecodeUserData decodes encoded user property data to a map
func DiscardUser(reliableClientAddr string, sid string)
DiscardUser Deletes a user data. Either reliableClientAddr or SID to be used.
[NOTE] Uses mutex lock internally.
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 EncodeUserData(user *User) (string, error)
EncodeUserData encodes the user property data to base64 string.
func ExistsByID(sid string) bool
ExistsByID returns true if the user by the given SID exists.
[NOTE] This does NOT update user TTL.
[NOTE] Uses mutex lock internally.
func GetCCU() int
GetCCU returns the number of concurrent users of the node
[NOTE] Uses mutex lock internally..
func New(data map[string]interface{}, initTTL int64) (map[string]interface{}, error)
New [INTERNAL USE ONLY] handle mesh network command sent from HTTP
[NOTE] Uses mutex lock internally.
if initTTL is greater than 0, it will be used as the initial TTL (in seconds) if initTTL is 0 or less, config TTL will be used as the initial TTL (in seconds)
func OnDiscard(callback func(string, *User))
OnDiscard Registers a callback on user data deletion
[IMPORTANT] This function is not goroutine safe and it must not be used in runtime. assign callbacks on the start of your process only.
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()
[IMPORTANT] This function is not goroutine safe and it must not be used in runtime. assign callbacks on the start of your process only.
callback func(newUserData *User) - Callback to be invoked when a new user is created.
func OnNewConnection(callback func(*User))
OnNewConnection assigns a callback on new user connection
[IMPORTANT] This function is not goroutine safe and it must not be used in runtime. assign callbacks on the start of your process only.
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
[NOTE] Uses mutex lock internally.
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
[NOTE] Uses mutex lock internally.
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
[NOTE] Uses mutex lock internally.
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
[NOTE] Uses mutex lock internally.
sid string - User SID of the target user to updated. state *ws.State - WebSocket state to be assigned to the user.
func Setup(ttl int64)
Setup Sets up user package without network protocol association
ttl int64 - TTL of the user data in seconds.
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
[NOTE] Uses mutex lock internally.
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 IsMoving bool // 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 UDPClientLocalAddrList []string // 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
[NOTE] Uses mutex lock internally.
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
[NOTE] Uses mutex lock internally.
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 (u *User) GetAsBool(k string) (bool, bool)
GetAsBool returns user data by its key as a bool.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsBoolArray(k string) ([]bool, bool)
GetAsBoolArray returns user data by its key as an array of bool.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsBytes(k string) ([]byte, bool)
GetAsBytes returns user data by its key as a string.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsFloat64(k string) (float64, bool)
GetAsFloat64 returns user data by its key as a float64.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsFloat64Array(k string) ([]float64, bool)
GetAsFloat64Array returns user data by its key as an array of float64.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsInt16(k string) (int16, bool)
GetAsInt16 returns user data by its key as a int16.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsInt16Array(k string) ([]int16, bool)
GetAsInt16Array returns user data by its key as an array of int16.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsInt32(k string) (int32, bool)
GetAsInt32 returns user data by its key as a int32.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsInt32Array(k string) ([]int32, bool)
GetAsInt32Array returns user data by its key as an array of int32.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsInt64(k string) (int64, bool)
GetAsInt64 returns user data by its key as a int64.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsInt64Array(k string) ([]int64, bool)
GetAsInt64Array returns user data by its key as an array of int64.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsInt8(k string) (int8, bool)
GetAsInt8 returns user data by its key as a int8.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsInt8Array(k string) ([]int8, bool)
GetAsInt8Array returns user data by its key as an array of int8.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsIntArray(k string) ([]int, bool)
GetAsIntArray returns user data by its key as an array of int.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsString(k string) (string, bool)
GetAsString returns user data by its key as a string.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsStringArray(k string) ([]string, bool)
GetAsStringArray returns user data by its key as an array of string.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsUint16(k string) (uint16, bool)
GetAsUint16 returns user data by its key as a uint16.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsUint16Array(k string) ([]uint16, bool)
GetAsUint16Array returns user data by its key as an array of uint16.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsUint32(k string) (uint32, bool)
GetAsUint32 returns user data by its key as a uint32.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsUint32Array(k string) ([]uint32, bool)
GetAsUint32Array returns user data by its key as an array of uint32.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsUint64(k string) (uint64, bool)
GetAsUint64 returns user data by its key as a uint32.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsUint64Array(k string) ([]uint64, bool)
GetAsUint64Array returns user data by its key as an array of uint64.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (u *User) GetAsUint8(k string) (uint8, bool)
GetAsUint8 returns user data by its key as a uint8.
[IMPORTANT] The second returned value indicates if the value exists or not. (false means the value does not exist or invalid data type)
func (u *User) GetAsUint8Array(k string) ([]uint8, bool)
GetAsUint8Array returns user data by its key as an array of uint8.
[IMPORTANT] The second returned value indicates if the value exists or not (false means the value does not exist or invalid data type)
[NOTE] Uses mutex lock internally.
func (user *User) GetClientAddr() string
GetClientAddr returns the user client address
func (user *User) GetClientKey() string
GetClientKey returns clientKey
func (user *User) GetLatency() int64
GetLatency returns server-to-client latency in milliseconds
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
[NOTE] Uses mutex lock internally.
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) SetLatency(clientTime int64)
SetLatency [INTERNAL USE ONLY]
func (user *User) ThrottledPush(throttleTime int64, msg []byte, reliable bool)
ThrottledPush [Deprecated] use ThrottledServerPush instead
[NOTE] Uses mutex lock internally.
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.
[NOTE] Uses mutex lock internally.
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
[NOTE] Uses mutex lock internally.
[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.