beehive/client.go

54 lines
831 B
Go

package beehive
import (
"encoding/json"
"log"
"net"
)
type Client struct {
Conn net.Conn
Out chan []byte
Worker int
}
func NewClient(conn net.Conn) *Client {
c := &Client{
Conn: conn,
Out: make(chan []byte),
}
go c.handleWrite()
return c
}
func (c *Client) handleWrite() {
for out := range c.Out {
log.Printf(" -> %s", out)
_, err := c.Conn.Write(out)
if err != nil {
// TODO terminate client
log.Println("write error", err)
continue
}
}
}
func (c *Client) Authenticate(id int, password string) {
challenge := &ServerAuthentication{
Worker: id,
Password: password,
}
challengeJSON, err := json.Marshal(challenge)
if err != nil {
log.Fatal(err)
}
_, err = c.Conn.Write(append(challengeJSON, byte('\n')))
if err != nil {
log.Fatalf("Write to server failed: %s", err)
}
}