X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=client.go;h=95dd93f60d9e7958d5eeec9229284cb96ab403cb;hb=ad68cf29f652c5bfa7822a10000e9da658fbf1d5;hp=07a209b61d0a524653e56714bfa7fe81b10e4ebf;hpb=def74ddc09249de9ab72001bb00550863d7f27e6;p=goircd.git diff --git a/client.go b/client.go index 07a209b..95dd93f 100644 --- a/client.go +++ b/client.go @@ -1,6 +1,6 @@ /* goircd -- minimalistic simple Internet Relay Chat (IRC) server -Copyright (C) 2014 Sergey Matveev +Copyright (C) 2014-2015 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ + package main import ( @@ -26,21 +27,23 @@ 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 nickname string username string realname string + password string + away *string } type ClientAlivenessState struct { - ping_sent bool + pingSent bool timestamp time.Time } @@ -48,34 +51,33 @@ 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(client, "New client") - sink <- ClientEvent{client, EVENT_NEW, ""} + 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 } - 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{} @@ -89,7 +91,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