...

Package group

import "github.com/Diarkis/diarkis/group"
Overview
Index

Overview ▾

Package group ▷

Group - Distributed MO

Suited for building chat and similar functionalities. Able to connect users with different network protocols with no limit to the number of users to connect with.

Configurations

Group configurations are explained below.

{
  "relayLimit": 2,
  "sendInterval": 300
}

▶︎ Configuration Value

relayLimit - Default is 2

Defines the number of mesh nodes to send message at a time when broadcasting messages. Default is 2. Higher the number, lower the latency and higher to CPU load.

sendInterval - Default is 300

Defines broadcast packet send interval in milliseconds. Increasing this number will cause more delay, but less CPU stress.

Constants

MeshValueName name of mesh value

const MeshValueName = "g"

VaultName name of the vault

const VaultName = "Groups"

func AfterBroadcastGroupCmd

func AfterBroadcastGroupCmd(callback func(*user.User, func(error)))

AfterBroadcastGroupCmd registers a callback function to be executed after broadcast group command: Must be called before ExposeCommands

func AfterCreateGroupCmd

func AfterCreateGroupCmd(callback func(*user.User, func(error)))

AfterCreateGroupCmd registers a callback function to be executed after create group command: Must be called before ExposeCommands

func AfterJoinGroupCmd

func AfterJoinGroupCmd(callback func(*user.User, func(error)))

AfterJoinGroupCmd registers a callback function to be executed after join group command: Must be called before ExposeCommands

func AfterLeaveGroupCmd

func AfterLeaveGroupCmd(callback func(*user.User, func(error)))

AfterLeaveGroupCmd registers a callback function to be executed after leave group command: Must be called before ExposeCommands

func Announce

func Announce(groupID string, ver uint8, cmd uint16, message []byte, reliable bool)

Announce sends a broadcast message to the other members in the group without having the "sender" - MUST not be called by client directly for security reason

func BeforeBroadcastGroupCmd

func BeforeBroadcastGroupCmd(callback func(*user.User, func(error)))

BeforeBroadcastGroupCmd registers a callback function to be executed before broadcast group command: Must be called before ExposeCommands

func BeforeCreateGroupCmd

func BeforeCreateGroupCmd(callback func(*user.User, func(error)))

BeforeCreateGroupCmd registers a callback function to be executed before create group command: Must be called before ExposeCommands

func BeforeJoinGroupCmd

func BeforeJoinGroupCmd(callback func(*user.User, func(error)))

BeforeJoinGroupCmd registers a callback function to be executed before join group command: Must be called before ExposeCommands

func BeforeLeaveGroupCmd

func BeforeLeaveGroupCmd(callback func(*user.User, func(error)))

BeforeLeaveGroupCmd registers a callback function to be executed before leave group command: Must be called before ExposeCommands

func Broadcast

func Broadcast(groupID string, senderUser *user.User, ver uint8, cmd uint16, message []byte, reliable bool)

Broadcast Sends a broadcast message to the other members in the group

func ExposeCommands

func ExposeCommands()

ExposeCommands exposes commands to the client to work with the Group package

func GetGroupIDList

func GetGroupIDList(userData *user.User) []string

GetGroupIDList returns an array of group IDs

func GetLatestGroupID

func GetLatestGroupID(userData *user.User) string

GetLatestGroupID returns the newest group ID the user joined or created

func GetMemberMeshNodes

func GetMemberMeshNodes(groupID string) []string

GetMemberMeshNodes returns an array of member mesh nodes that are participating the group

func Join

func Join(groupID string, userData *user.User, ver uint8, cmd uint16, message []byte, callback func(error))

Join Joins a group and notify the other members of the group on joining the group If message is nil or empty, broadcast will NOT be sent

func Leave

func Leave(groupID string, userData *user.User, ver uint8, cmd uint16, message []byte, callback func(error))

Leave Leaves from a group and notify the other members on leaving If message is nil or empty, broadcast will NOT be sent

func NewGroup

func NewGroup(userData *user.User, allowEmpty bool, join bool, ttl int64, interval int64) (string, error)

NewGroup Creates a new group and returns the groupp ID as a string to the callback function.

allowEmpty - If true, the group will not be deleted until TTL expires even if all members leave
join       - If true, the creator user will join the group automatically
ttl        - TTL of the group in seconds. The value must be greater than 0
interval   - Broadcast interval in milliseconds. interval below 100ms will be forced to 0. If it's 0, no packet merge

func SetOnDiscardCustomMessage

func SetOnDiscardCustomMessage(custom func(string, string) []byte)

SetOnDiscardCustomMessage sets a custom function to create a custom message to be sent to members on user discard

func Setup

func Setup(confpath string)

Setup optionally loads configurations

func SetupAsTCPServer

func SetupAsTCPServer()

SetupAsTCPServer Sets up group package as TCP server

func SetupAsUDPServer

func SetupAsUDPServer()

SetupAsUDPServer Sets up group package as UDP/RUDP server

func SetupAsWebSocketServer

func SetupAsWebSocketServer()

SetupAsWebSocketServer Sets up group package as WebSocket server

type Group

Group group data structure

type Group struct {
    ID         string
    AllowEmpty bool
    Members    []*Member
    // remote member mesh node list
    RemoteMemberNodes map[string]bool
    // user ID as key
    MemberMeshEndPoints map[string]string
    // user ID as key and user SID as value
    MemberSIDs map[string]string

    TTL int64
    // contains filtered or unexported fields
}

type Member

Member member of a group data structure

type Member struct {
    UID          string
    SID          string
    MeshEndPoint string
}