]> Cypherpunks.ru repositories - goircd.git/blobdiff - client.go
Remove signal processor for password reloading and use pointers to strings
[goircd.git] / client.go
index cc179c8ca1eaadca8796c5d144288ca3d2e0c359..3637d499da5e245990241eaffb0efad337214600 100644 (file)
--- a/client.go
+++ b/client.go
@@ -26,55 +26,56 @@ import (
 )
 
 const (
-       CRLF     = "\x0d\x0a"
-       BUF_SIZE = 1380
+       CRLF    = "\x0d\x0a"
+       BufSize = 1380
 )
 
 type Client struct {
-       hostname   string
+       hostname   *string
        conn       net.Conn
        registered bool
-       ping_sent  bool
-       timestamp  time.Time
        nickname   string
        username   string
        realname   string
+       password   string
+}
+
+type ClientAlivenessState struct {
+       pingSent  bool
+       timestamp time.Time
 }
 
 func (client Client) String() string {
        return client.nickname + "!" + client.username + "@" + client.conn.RemoteAddr().String()
 }
 
-func NewClient(hostname string, conn net.Conn) *Client {
-       return &Client{hostname: hostname, conn: conn, nickname: "*"}
+func NewClient(hostname *string, conn net.Conn) *Client {
+       return &Client{hostname: hostname, conn: conn, nickname: "*", password: ""}
 }
 
 // Client processor blockingly reads everything remote client sends,
 // splits messages by CRLF and send them to Daemon gorouting for processing
 // it futher. Also it can signalize that client is unavailable (disconnected).
 func (client *Client) Processor(sink chan<- ClientEvent) {
-       var buf_net []byte
+       var bufNet []byte
        buf := make([]byte, 0)
-       log.Println("New client", client)
-       sink <- ClientEvent{client, EVENT_NEW, ""}
+       log.Println(client, "New client")
+       sink <- ClientEvent{client, EventNew, ""}
        for {
-               buf_net = make([]byte, BUF_SIZE)
-               _, err := client.conn.Read(buf_net)
+               bufNet = make([]byte, BufSize)
+               _, err := client.conn.Read(bufNet)
                if err != nil {
-                       log.Println(client, "connection lost", err)
-                       sink <- ClientEvent{client, EVENT_DEL, ""}
+                       sink <- ClientEvent{client, EventDel, ""}
                        break
                }
-               client.timestamp = time.Now()
-               client.ping_sent = false
-               buf_net = bytes.TrimRight(buf_net, "\x00")
-               buf = append(buf, buf_net...)
+               bufNet = bytes.TrimRight(bufNet, "\x00")
+               buf = append(buf, bufNet...)
                if !bytes.HasSuffix(buf, []byte(CRLF)) {
                        continue
                }
                for _, msg := range bytes.Split(buf[:len(buf)-2], []byte(CRLF)) {
                        if len(msg) > 0 {
-                               sink <- ClientEvent{client, EVENT_MSG, string(msg)}
+                               sink <- ClientEvent{client, EventMsg, string(msg)}
                        }
                }
                buf = []byte{}
@@ -88,7 +89,7 @@ func (client *Client) Msg(text string) {
 
 // Send message from server. It has ": servername" prefix.
 func (client *Client) Reply(text string) {
-       client.Msg(":" + client.hostname + " " + text)
+       client.Msg(":" + *client.hostname + " " + text)
 }
 
 // Send server message, concatenating all provided text parts and