diff options
author | Runxi Yu <me@runxiyu.org> | 2024-12-08 08:52:23 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2024-12-08 08:52:23 +0800 |
commit | d201e74fff4e6d82d639d858826bdb4190936c07 (patch) | |
tree | 7e5de8e206bf913fc0bbef5eba81b06fa9c1e06c /clients.go | |
parent | Add basic command handling (diff) | |
download | meseircd-d201e74fff4e6d82d639d858826bdb4190936c07.tar.gz meseircd-d201e74fff4e6d82d639d858826bdb4190936c07.tar.zst meseircd-d201e74fff4e6d82d639d858826bdb4190936c07.zip |
Server and self awareness
Diffstat (limited to 'clients.go')
-rw-r--r-- | clients.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/clients.go b/clients.go new file mode 100644 index 0000000..e1b80a6 --- /dev/null +++ b/clients.go @@ -0,0 +1,38 @@ +package main + +import ( + "net" +) + +type Client struct { + conn net.Conn + UID [6]byte + Nick string + Ident string + Host string + Server Server +} + +func (client *Client) Send(msg SMsg) { + client.SendRaw(msg.ClientSerialize()) +} + +// Send failures are not returned; broken connections detected and severed on +// the next receive. +func (client *Client) SendRaw(s string) { + _, 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() + } +} + +func (client Client) ClientSource() string { + // TODO: Edge cases where these aren't available + return client.Nick + "!" + client.Ident + "@" + client.Host +} + +func (client Client) ServerSource() string { + return string(client.Server.SID[:]) + string(client.UID[:]) +} |