Browse Source

Added 'Do' function to the client.

tags/0.0.1
mikespook 13 years ago
parent
commit
c5b9f19962
3 changed files with 40 additions and 6 deletions
  1. +30
    -4
      src/pkg/gearman/client.go
  2. +7
    -1
      src/pkg/gearman/client_test.go
  3. +3
    -1
      src/pkg/gearman/gearman.go

+ 30
- 4
src/pkg/gearman/client.go View File

@@ -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:])


+ 7
- 1
src/pkg/gearman/client_test.go View File

@@ -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()


+ 3
- 1
src/pkg/gearman/gearman.go View File

@@ -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
}



Loading…
Cancel
Save