aboutsummaryrefslogtreecommitdiff
path: root/clients.go
diff options
context:
space:
mode:
Diffstat (limited to 'clients.go')
-rw-r--r--clients.go21
1 files changed, 18 insertions, 3 deletions
diff --git a/clients.go b/clients.go
index d142157..1a363cc 100644
--- a/clients.go
+++ b/clients.go
@@ -2,6 +2,7 @@ package main
import (
"net"
+ "log/slog"
)
type Client struct {
@@ -11,21 +12,27 @@ type Client struct {
Ident string
Host string
Server Server
+ State ClientState
}
-func (client *Client) Send(msg SMsg) {
- client.SendRaw(msg.ClientSerialize())
+func (client *Client) Send(msg SMsg) error {
+ return client.SendRaw(msg.ClientSerialize())
}
// Send failures are not returned; broken connections detected and severed on
// the next receive.
-func (client *Client) SendRaw(s string) {
+func (client *Client) SendRaw(s string) error {
+ if client.conn == nil {
+ panic("not implemented")
+ }
+ slog.Debug("send", "line", s, "conn", client.conn)
_, err := (*client.conn).Write([]byte(s))
if err != nil {
// TODO: Should shut down the netFd instead but the stdlib
// doesn't expose a way to do this.
(*client.conn).Close()
}
+ return nil
}
func (client Client) ClientSource() string {
@@ -36,3 +43,11 @@ func (client Client) ClientSource() string {
func (client Client) ServerSource() string {
return string(client.Server.SID[:]) + string(client.UID[:])
}
+
+type ClientState uint8
+
+const (
+ ClientStateRemote ClientState = iota
+ ClientStatePreRegistration
+ ClientStateRegistered
+)