aboutsummaryrefslogtreecommitdiff
path: root/clients.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2024-12-08 08:52:23 +0800
committerRunxi Yu <me@runxiyu.org>2024-12-08 08:52:23 +0800
commitd201e74fff4e6d82d639d858826bdb4190936c07 (patch)
tree7e5de8e206bf913fc0bbef5eba81b06fa9c1e06c /clients.go
parentAdd basic command handling (diff)
downloadmeseircd-d201e74fff4e6d82d639d858826bdb4190936c07.tar.gz
meseircd-d201e74fff4e6d82d639d858826bdb4190936c07.tar.zst
meseircd-d201e74fff4e6d82d639d858826bdb4190936c07.zip
Server and self awareness
Diffstat (limited to 'clients.go')
-rw-r--r--clients.go38
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[:])
+}