diff --git a/src/pkg/gearman/client.go b/src/pkg/gearman/client.go index 094d0bf..1e561f6 100644 --- a/src/pkg/gearman/client.go +++ b/src/pkg/gearman/client.go @@ -3,7 +3,7 @@ package gearman import ( "os" "net" - "log" +// "log" ) type Client struct { @@ -61,7 +61,34 @@ func (client *Client) work() { } func (client *Client) Do(funcname string, data []byte, flag byte) (err os.Error) { - return + var datatype uint32 + if flag & JOB_NORMAL == JOB_NORMAL { + if flag & JOB_BG == JOB_BG { + datatype = SUBMIT_JOB_BG + } else { + datatype = SUBMIT_JOB + } + } else if flag & JOB_LOW == JOB_LOW { + if flag & JOB_BG == JOB_BG { + datatype = SUBMIT_JOB_LOW_BG + } else { + datatype = SUBMIT_JOB_LOW + } + } else if flag & JOB_HIGH == JOB_HIGH { + if flag & JOB_BG == JOB_BG { + datatype = SUBMIT_JOB_HIGH_BG + } else { + datatype = SUBMIT_JOB_HIGH + } + } + rel := make([]byte, 0, 1024 * 64) + rel = append(rel, []byte(funcname) ...) + rel = append(rel, '\x00') + rel = append(rel, '\xFF') + rel = append(rel, '\x00') + rel = append(rel, data ...) + job := NewClientJob(REQ, datatype, data) + return client.WriteJob(job) } func (client *Client) Echo(data []byte) (err os.Error) { @@ -78,7 +105,7 @@ func (client *Client) LastResult() (job *ClientJob) { <-client.JobQueue } } - return <-client.JobQueue + return <-client.JobQueue } func (client *Client) LastError() (err os.Error) { @@ -98,7 +125,6 @@ func (client *Client) WriteJob(job *ClientJob) (err os.Error) { } func (client *Client) Write(buf []byte) (err os.Error) { - log.Println(buf) var n int for i := 0; i < len(buf); i += n { n, err = client.conn.Write(buf[i:]) diff --git a/src/pkg/gearman/client_test.go b/src/pkg/gearman/client_test.go index 02554e5..3c6fbc6 100644 --- a/src/pkg/gearman/client_test.go +++ b/src/pkg/gearman/client_test.go @@ -2,7 +2,7 @@ package gearman import ( "testing" - "os" +// "os" ) var client *Client @@ -24,6 +24,12 @@ func TestClientEcho(t * testing.T) { } } +func TestClientDo(t * testing.T) { + if err := client.Do("ToUpper", []byte("abcdef"), JOB_NORMAL); err != nil { + t.Error(err) + } +} + /* func TestClientLastResult(t * testing.T) { job := client.LastResult() diff --git a/src/pkg/gearman/gearman.go b/src/pkg/gearman/gearman.go index 8650484..a59e931 100644 --- a/src/pkg/gearman/gearman.go +++ b/src/pkg/gearman/gearman.go @@ -78,7 +78,9 @@ func getError(data []byte) (eno os.Errno, err os.Error) { err = os.NewError("The input is not a error data.") return } - eno, err = rel[0], rel[1] + l := len(rel[0]) + eno = os.Errno(byteToUint32([4]byte{rel[0][l-4], rel[0][l-3], rel[0][l-2], rel[0][l - 1]})) + err = os.NewError(string(rel[1])) return }