diff options
Diffstat (limited to 'clients.go')
-rw-r--r-- | clients.go | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -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 +) |