Browse Source

finished some worker's apis.

tags/0.0.1
mikespook 13 years ago
commit
153066eb03
5 changed files with 106 additions and 0 deletions
  1. +19
    -0
      src/pkg/gearman/Makefile
  2. +6
    -0
      src/pkg/gearman/client.go
  3. +6
    -0
      src/pkg/gearman/gearman.go
  4. +13
    -0
      src/pkg/gearman/gearman_test.go
  5. +62
    -0
      src/pkg/gearman/worker.go

+ 19
- 0
src/pkg/gearman/Makefile View File

@@ -0,0 +1,19 @@
# 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=gearman
CGOFILES=\
gearman.go\
worker.go\
client.go\

CLEANFILES+=gearman_test

include $(GOROOT)/src/Make.pkg

%: install %.go
$(GC) $*.go
$(LD) -o $@ $*.$O

+ 6
- 0
src/pkg/gearman/client.go View File

@@ -0,0 +1,6 @@
package gearman

// #cgo: LDFLAGS: -lgearman
// #include <libgearman/gearman.h>

import "C"

+ 6
- 0
src/pkg/gearman/gearman.go View File

@@ -0,0 +1,6 @@
package gearman

// #cgo: LDFLAGS: -lgearman
// #include <libgearman/gearman.h>

import "C"

+ 13
- 0
src/pkg/gearman/gearman_test.go View File

@@ -0,0 +1,13 @@
package main

import (
"gearman"
"fmt"
)

func main() {
worker := gearman.GearmanWorkerCreate()
worker.AddServer("127.0.0.1", 4730)
worker.Work()
worker.Free()
}

+ 62
- 0
src/pkg/gearman/worker.go View File

@@ -0,0 +1,62 @@
package gearman

// #cgo LDFLAGS: -lgearman
// #include <libgearman/gearman.h>
import "C"

import(
"log"
"unsafe"
)

type GearmanWorker struct {
worker C.gearman_worker_st
}
// Create gearman worker
func GearmanWorkerCreate() * GearmanWorker {

worker := new(GearmanWorker)
if C.gearman_worker_create(&worker.worker) == nil {
log.Panic("Memory allocation failure on worker creation")
}
return worker
}

// get error
func (worker * GearmanWorker) Error() string {
return C.GoString(C.gearman_worker_error(&worker.worker))
}

// add server
func (worker * GearmanWorker) AddServer(host string, port uint16) {
h := C.CString(host)
defer C.free(unsafe.Pointer(h))
if C.gearman_worker_add_server(&worker.worker, h,
C.in_port_t(port)) != C.GEARMAN_SUCCESS {
log.Panic(worker.Error())
}
}

// add function
func (worker * GearmanWorker) AddFunction(funcname string, timeout uint32, f interface{}, context interface{}) {
fn := C.CString(funcname)
defer C.free(unsafe.Pointer(fn))
if C.gearman_worker_add_function(&worker.worker, fn, C.uint32_t(timeout), C.gearman_worker_fn(&unsafe.Pointer(&f)), unsafe.Pointer(&context)) != C.GEARMAN_SUCCESS {
log.Panic(worker.Error())
}
}

// work
func (worker * GearmanWorker) Work() {
for {
if C.gearman_worker_work(&worker.worker) != C.GEARMAN_SUCCESS {
log.Panic(worker.Error())
}
}
}

// free
// should used as defer
func (worker * GearmanWorker) Free() {
C.gearman_worker_free(&worker.worker)
}

Loading…
Cancel
Save