You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
831 B
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)
|
|
}
|
|
}
|