ClientDevice
The ClientDevice
represents a client device/host connected in your network and is possibly accessing the captive portal using a browser.
It can be retrieved using the Http.GetClientDevice method in your handler.
// http handler
func (w http.ResponseWriter, r *http.Request) {
clnt, _ := api.Http().GetClientDevice(r)
}
The clnt
variable is an instance of the ClientDevice
interface.
1. ClientDevice Methods
Below are the methods available on the ClientDevice
instance.
Id
Returns a int64
value of the client device ID.
Hostname
Returns a string
value of the client device hostname.
IpAddr
Returns a string
value of the client device IP address.
MacAddr
Returns a string
value of the client device MAC address.
Update
Updates the client device record in the database.
func (w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
clnt, _ := api.Http().GetClientDevice(r)
newMac := "00:11:22:33:44:55"
newIp := "192.168.1.123"
newHostname := "new-hostname"
err := clnt.Update(ctx, newMac, newIp, newHostname)
// handle error
}
Emit
Emits an event to the client device.
The data
parameter can any JSON serializable value.
Subscribe
Used to subscribe to an event on the client device. It returns a channel that emits a JSON representation in bytes.
ch := clnt.Subscribe("some_event")
go func() {
clnt.Emit("some_event", map[string]interface{}{"key": "value"})
}()
bytes := <-ch
var data map[string]interface{}
err := json.Unmarshal(bytes, &data)
fmt.Println(data) // map[key:value]
Unsubscribe
Used to unsubscribe from an event on the client device.
// subscribe first
ch := clnt.Subscribe("some_event")
// listen to the channel...
// then unsubscribe
clnt.Unsubscribe("some_event", ch)
2. Events
Events are emitted to the client device in the browser.
You can emit an event to a user account using the ClientDevice.Emit method like so:
func (w http.ResponseWriter, r *http.Request) {
clnt, _ := api.Http().Helpers().GetClientDevice(r)
evt := "some_event"
data := map[string]interface{}{"key": "value"}
clnt.Emit(evt, data)
}
You can listen to this events in the browser using the $flare.events like so:
You can also listen to events in your Go applications using the ClientDevice.Subscribe method.
The avaiable events geenerated by the system are:
Event | Description |
---|---|
session:connected |
Emitted when a client device is connected to the internet. |
session:disconnected |
Emitted when a client device is disconnected from the internet. |