The Notifier module can be set up on TCP and UDP servers.
When using the Notifier module, it must be set up on all servers except for HTTP.
Setup
To expose built-in commands to a client, you can use the diarkisexec package for setup.
Add it to the server's main function as shown below. The following is an example setup for a UDP server. The setup function in diarkisexec needs to be executed before calling diarkisexec.StartDiarkis().
Additionally, you need to configure the message broadcast interval and content with diarkisexec.SetupNotificationService(name, interval, callback).
package main
import "github.com/Diarkis/diarkis/diarkisexec"
func main() {
logConfigPath := "/configs/shared/log.json"
meshConfigPath := ""
diarkisexec.SetupDiarkis(logConfigPath, meshConfigPath, &diarkisexec.Modules{
Notifier: &diarkisexec.Options{},
})
diarkisexec.SetupNotificationService("Notification", 60, handleNotification)
diarkisexec.SetupDiarkisUDPServer("/configs/udp/main.json")
diarkisexec.StartDiarkis()
}
func handleNotification() (*diarkisexec.Notification, error) {
// Retrieve notification data from a database by the current time
notificationData := someDatabase.GetNotificationDataByCurrentTime(year, month, date)
if notificationData == nil {
// No notification data to send out
return nil, nil
}
n := &diarkisexec.Notification{}
n.ID = notificationData.ID
n.Name = notificationData.Name
// Ver is used by the client to identify the message when received.
n.Ver = notificationData.Ver
// Cmd is used by the client to identify the message when received.
n.Cmd = notificationData.Cmd
n.Message = []byte("Notification message says 'Hello from the server'")
// TTL is in seconds to indicate the availability of the notification data.
// The notification will be available for the not-connected-clients for the duration of TTL and
// will be sent to the clients when they connect before TTL expires.
n.TTL = int64(60 * 60) // one hour
return n, nil
}