Setting Up the Notifier Module on the Server

Overview

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 servers.

Setup

To expose built-in commands to the client, you can use the diarkisexec package for setup.

Add the following to the main function of the server. Below is an example for setting up a UDP server. The diarkisexec.Setup function must be executed before calling diarkisexec.StartDiarkis().

Additionally, you need to configure the interval and contents of message broadcasts with diarkisexec.SetupNotificationService(name, interval, callback).

For more details, please refer to the diarkisexec API Reference.

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
}

Last updated