| | |
| | | "sync" |
| | | "time" |
| | | "unsafe" |
| | | |
| | | "github.com/nsqio/go-nsq" |
| | | ) |
| | | |
| | | //export createProducer |
| | |
| | | type consumer struct { |
| | | nsqcon *nsqclient.NsqConsumer |
| | | lck sync.Mutex |
| | | msgs []*nsq.Message |
| | | msgs [][]byte |
| | | } |
| | | |
| | | //export createConsumer |
| | |
| | | //export Run |
| | | func Run(ch unsafe.Pointer, addr string) { |
| | | c := ccvt(ch) |
| | | c.nsqcon.AddHandler(nsq.HandlerFunc(func(msg *nsq.Message) error { |
| | | c.nsqcon.AddHandler(func(msg []byte) error { |
| | | c.lck.Lock() |
| | | defer c.lck.Unlock() |
| | | c.msgs = append(c.msgs, msg) |
| | | return nil |
| | | })) |
| | | }) |
| | | |
| | | c.nsqcon.Run(addr, 1) |
| | | } |
| | |
| | | //export RunLookupd |
| | | func RunLookupd(ch unsafe.Pointer, lookAddr string) { |
| | | c := ccvt(ch) |
| | | c.nsqcon.AddHandler(nsq.HandlerFunc(func(msg *nsq.Message) error { |
| | | c.nsqcon.AddHandler(func(msg []byte) error { |
| | | c.lck.Lock() |
| | | defer c.lck.Unlock() |
| | | c.msgs = append(c.msgs, msg) |
| | | return nil |
| | | })) |
| | | }) |
| | | |
| | | c.nsqcon.RunLookupd(lookAddr, 1) |
| | | } |
| | |
| | | msg := c.msgs[0] |
| | | c.msgs = c.msgs[1:] |
| | | |
| | | *size = C.size_t(len(msg.Body)) |
| | | *size = C.size_t(len(msg)) |
| | | ptr := C.malloc(*size) |
| | | C.memcpy(ptr, unsafe.Pointer(&msg.Body[0]), *size) |
| | | C.memcpy(ptr, unsafe.Pointer(&msg[0]), *size) |
| | | *data = ptr |
| | | |
| | | return true |