forked from yuxh/gearman-go
		
	Added a socket client, just for test.
This commit is contained in:
		
							parent
							
								
									153066eb03
								
							
						
					
					
						commit
						d7a1ea0e6b
					
				
							
								
								
									
										17
									
								
								test/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								test/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
# Copyright 2009 The Go Authors.  All rights reserved.
 | 
			
		||||
# Use of this source code is governed by a BSD-style
 | 
			
		||||
# license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
include $(GOROOT)/src/Make.inc
 | 
			
		||||
 | 
			
		||||
TARG=client
 | 
			
		||||
GOFILES=\
 | 
			
		||||
	client.go\
 | 
			
		||||
 | 
			
		||||
CLEANFILES+=client
 | 
			
		||||
 | 
			
		||||
include $(GOROOT)/src/Make.pkg
 | 
			
		||||
 | 
			
		||||
%: install %.go
 | 
			
		||||
	$(GC) $*.go
 | 
			
		||||
	$(LD) -o $@ $*.$O
 | 
			
		||||
							
								
								
									
										74
									
								
								test/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								test/client.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,74 @@
 | 
			
		||||
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())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user