gearman-go/test/client.go

75 lines
1.3 KiB
Go
Raw Normal View History

2011-03-16 20:34:07 +08:00
package main
import (
"net"
"log"
"fmt"
)
type Client struct {
c * net.TCPConn
w chan []byte
r chan []byte
}
func NewClient() * Client {
client := new(Client)
wch := make(chan []byte, 2048)
rch := make(chan []byte, 2048)
client.w = wch
client.r = rch
addr, err := net.ResolveTCPAddr("127.0.0.1:4730")
if err != nil {
log.Panic(err.String())
}
c, err := net.DialTCP("tcp", nil, addr)
client.c = c
if err != nil {
log.Panic(err.String())
}
go client.ReadLoop()
go client.WriteLoop()
return client
}
func (client * Client) ReadLoop() {
for {
buf := make([]byte, 2048)
_, err := client.c.Read(buf)
if err != nil {
client.c.Close()
break;
}
client.r <- buf
}
}
func (client * Client) WriteLoop() {
for {
select {
case buf := <- client.w:
client.c.Write(buf)
}
}
}
func (client * Client) Write(data []byte) {
client.w <- data
}
func (client * Client) Read() []byte{
var buf []byte
select {
case buf = <- client.r:
}
return buf
}
func main() {
client := NewClient()
client.Write([]byte("TEST\r\n"))
for {
fmt.Println(client.Read())
}
}