The HTTP server serves as the entry point for Diarkis. The application server connects to the HTTP server to obtain real-time connection endpoints and encryption keys.
Additionally, you can define custom endpoints.
Setting Up the HTTP Server
To expose built-in commands to the client, you can set it up using the diarkisexec package.
You can expose built-in commands by specifying modules with diarkisexec.SetupDiarkis(). By setting ConfigPath for each module, you can customize the configuration.
You can expose custom commands using diarkisexec.SetServerCommandHandler().
You can set up a UDP server with diarkisexec.SetupDiarkisHTTPServer(). You can customize the server settings using a JSON file as an argument.
The above functions must be executed before calling diarkisexec.StartDiarkis().
Specify the path to the JSON file in meshConfigPath. For more details, refer to #mesh-setup.
HTTP Server Configuration
Configuration is done in JSON format.
Key
Default
address
"127.0.0.1"
The address for binding the UDP server
port
"7000"
The port for the UDP server to bind to. The UDP server will automatically search for an available port starting from the specified port.
useFixedPort
false
If set to true, the HTTP server will bind only to the specified port.
timeout
5
HTTP response timeout (seconds)
enableEncryption
true
If set to false, packet encryption and decryption will be disabled. Other servers need to be configured similarly.
Creating Custom HTTP Endpoints
Diarkis's HTTP server allows you to write custom endpoints.
package httpcmds
import (
"github.com/Diarkis/diarkis/server/http"
)
func Expose(rootpath string) {
// :message is treated as a parameter and the value can be accessed from *http.Params
http.Get("/hello/:message", handleHello)
}
func handleHello(res *http.Response, req *http.Request, params *http.Params, next func(error)) {
message := params.GetAsString("message")
res.Respond(message, http.Ok)
// move on to other handlers
next(nil)
}
Using JSON in HTTP Endpoints
Diarkis's HTTP server automatically decodes the request body into req.JSONBody when the ContentType of the request is application/json. Note that an object must be described to store in the JSON Body.