package main

import (
    "gearman"
    "fmt"
    "log"
    "os"
    "strings"
)

func ToUpper(job *gearman.WorkerJob) ([]byte, os.Error) {
    data := []byte(strings.ToUpper(string(job.Data)))
    return data, nil
}

func main() {
    worker := gearman.NewWorker()
    worker.AddServer("127.0.0.1:4730")
    worker.AddFunction("ToUpper", ToUpper, 0)
    worker.AddFunction("ToUpperTimeOut5", ToUpper, 5)

    go func() {
        log.Println("start worker")
        for {
            print("cmd: ")
            var str string
            fmt.Scan(&str)
            switch str {
            case "echo":
                worker.Echo([]byte("Hello world!"))
                var job *gearman.WorkerJob
                for job = <-worker.JobQueue; job.DataType != gearman.ECHO_RES; job = <-worker.JobQueue {
                    log.Println(job)
                }
                log.Println(string(job.Data))
            case "quit":
                worker.Close()
                return
            case "result":
                job := <-worker.JobQueue
                log.Println(string(job.Data))
            default:
                log.Println("Unknown command")
            }
        }
    }()
    worker.Work()
}