Great. We got it. The client do the job correctly.
This commit is contained in:
		
							parent
							
								
									d8882938f7
								
							
						
					
					
						commit
						f6d2a16685
					
				@ -10,18 +10,24 @@ func main() {
 | 
				
			|||||||
    defer client.Close()
 | 
					    defer client.Close()
 | 
				
			||||||
    client.AddServer("127.0.0.1:4730")
 | 
					    client.AddServer("127.0.0.1:4730")
 | 
				
			||||||
    echo := []byte("Hello world")
 | 
					    echo := []byte("Hello world")
 | 
				
			||||||
/*
 | 
					
 | 
				
			||||||
    log.Println(echo)
 | 
					    if data, err := client.Echo(echo); err != nil {
 | 
				
			||||||
    log.Println(client.Echo(echo))
 | 
					        log.Println(string(data))
 | 
				
			||||||
*/
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    handle, err := client.Do("ToUpper", echo, gearman.JOB_NORMAL)
 | 
					    handle, err := client.Do("ToUpper", echo, gearman.JOB_NORMAL)
 | 
				
			||||||
    if err != nil {
 | 
					    if err != nil {
 | 
				
			||||||
        log.Println(err)
 | 
					        log.Println(err)
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        log.Println(handle)
 | 
					        log.Println(handle)
 | 
				
			||||||
        log.Println(<-client.JobQueue)
 | 
					        job := <-client.JobQueue
 | 
				
			||||||
 | 
					        if data, err := job.Result(); err != nil {
 | 
				
			||||||
 | 
					            log.Println(err)
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            log.Println(string(data))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /*
 | 
					    
 | 
				
			||||||
    known, running, numerator, denominator, err := client.Status(handle)
 | 
					    known, running, numerator, denominator, err := client.Status(handle)
 | 
				
			||||||
    if err != nil {
 | 
					    if err != nil {
 | 
				
			||||||
        log.Println(err)
 | 
					        log.Println(err)
 | 
				
			||||||
@ -42,5 +48,5 @@ func main() {
 | 
				
			|||||||
        log.Println(err)
 | 
					        log.Println(err)
 | 
				
			||||||
        log.Println(data)
 | 
					        log.Println(data)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    */
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
    "os"
 | 
					    "os"
 | 
				
			||||||
    "net"
 | 
					    "net"
 | 
				
			||||||
    "sync"
 | 
					    "sync"
 | 
				
			||||||
    "log"
 | 
					//    "log"
 | 
				
			||||||
    "strconv"
 | 
					    "strconv"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,21 +33,43 @@ func (client *Client) AddServer(addr string) (err os.Error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (client *Client) read() (data []byte, err os.Error) {
 | 
					func (client *Client) read() (data []byte, err os.Error) {
 | 
				
			||||||
    var rel []byte
 | 
					    if len(client.incoming) > 0 {
 | 
				
			||||||
    for {
 | 
					        data = <-client.incoming
 | 
				
			||||||
        buf := make([]byte, BUFFER_SIZE)
 | 
					    } else {
 | 
				
			||||||
        var n int
 | 
					        for {
 | 
				
			||||||
        if n, err = client.conn.Read(buf); err != nil {
 | 
					            buf := make([]byte, BUFFER_SIZE)
 | 
				
			||||||
            if (err == os.EOF && n == 0) {
 | 
					            var n int
 | 
				
			||||||
 | 
					            if n, err = client.conn.Read(buf); err != nil {
 | 
				
			||||||
 | 
					                if (err == os.EOF && n == 0) {
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            data = append(data, buf[0: n] ...)
 | 
				
			||||||
 | 
					            if n < BUFFER_SIZE {
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        rel = append(rel, buf[0: n] ...)
 | 
					 | 
				
			||||||
        if n < BUFFER_SIZE {
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    start, end := 0, 4
 | 
				
			||||||
 | 
					    for i := 0; i < len(data); i ++{
 | 
				
			||||||
 | 
					        if string(data[start:end]) == RES_STR {
 | 
				
			||||||
 | 
					            l := int(byteToUint32([4]byte{data[start+8], data[start+9], data[start+10], data[start+11]}))
 | 
				
			||||||
 | 
					            total := l + 12
 | 
				
			||||||
 | 
					            if total == len(data) {
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                client.incoming <- data[total:]
 | 
				
			||||||
 | 
					                data = data[:total]
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            start++
 | 
				
			||||||
 | 
					            end++
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = os.NewError("Invalid data struct.")
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (client *Client) ReadJob() (job *ClientJob, err os.Error) {
 | 
					func (client *Client) ReadJob() (job *ClientJob, err os.Error) {
 | 
				
			||||||
@ -107,7 +129,6 @@ func (client *Client) Do(funcname string, data []byte, flag byte) (handle string
 | 
				
			|||||||
        return
 | 
					        return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    handle = string(job.Data)
 | 
					    handle = string(job.Data)
 | 
				
			||||||
    log.Println(handle)
 | 
					 | 
				
			||||||
    go func() {
 | 
					    go func() {
 | 
				
			||||||
        if flag & JOB_BG != JOB_BG {
 | 
					        if flag & JOB_BG != JOB_BG {
 | 
				
			||||||
            for {
 | 
					            for {
 | 
				
			||||||
@ -174,7 +195,8 @@ func (client *Client) Echo(data []byte) (echo []byte, err os.Error) {
 | 
				
			|||||||
    if job, err = client.readLastJob(ECHO_RES); err != nil {
 | 
					    if job, err = client.readLastJob(ECHO_RES); err != nil {
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return job.Data, err
 | 
					    echo, err = job.Result()
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (client *Client) LastResult() (job *ClientJob) {
 | 
					func (client *Client) LastResult() (job *ClientJob) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user