From 784012e781d1de867c1e94cb0b4f966f61f54821 Mon Sep 17 00:00:00 2001 From: jay817 Date: Fri, 24 Jan 2025 23:52:57 +0000 Subject: [PATCH] Update windows-libzmq/README.md --- windows-libzmq/README.md | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/windows-libzmq/README.md b/windows-libzmq/README.md index 8cc9a50..af93252 100644 --- a/windows-libzmq/README.md +++ b/windows-libzmq/README.md @@ -67,4 +67,110 @@ for request in range(10): # Wait for a second before next request time.sleep(1) +``` + +# wrapper server.go +```go +package main + +/* +#cgo CFLAGS: -IC:/Users/j/+win/vcpkg/packages/zeromq_x64-windows/include +#cgo LDFLAGS: -LC:/Users/j/+win/vcpkg/packages/zeromq_x64-windows/lib -lzmq-mt-4_3_5 +#include +#include +*/ +import "C" +import ( + "fmt" + "unsafe" +) + +// 타입 별칭 +type ( + ZmqContext unsafe.Pointer + ZmqSocket unsafe.Pointer + ZmqMsg C.zmq_msg_t +) + +// 상수 +const ( + ZMQ_REP = C.ZMQ_REP +) + +// 래퍼 함수들 +func zmq_ctx_new() ZmqContext { + return ZmqContext(C.zmq_ctx_new()) +} + +func zmq_ctx_term(context ZmqContext) { + C.zmq_ctx_term(unsafe.Pointer(context)) +} + +func zmq_socket(context ZmqContext, typ int) ZmqSocket { + return ZmqSocket(C.zmq_socket(unsafe.Pointer(context), C.int(typ))) +} + +func zmq_close(socket ZmqSocket) { + C.zmq_close(unsafe.Pointer(socket)) +} + +func zmq_bind(socket ZmqSocket, endpoint string) { + cEndpoint := C.CString(endpoint) + defer C.free(unsafe.Pointer(cEndpoint)) + C.zmq_bind(unsafe.Pointer(socket), cEndpoint) +} + +func zmq_msg_init(msg *ZmqMsg) { + C.zmq_msg_init((*C.zmq_msg_t)(msg)) +} + +func zmq_msg_close(msg *ZmqMsg) { + C.zmq_msg_close((*C.zmq_msg_t)(msg)) +} + +func zmq_msg_recv(msg *ZmqMsg, socket ZmqSocket, flags int) { + C.zmq_msg_recv((*C.zmq_msg_t)(msg), unsafe.Pointer(socket), C.int(flags)) +} + +func zmq_msg_size(msg *ZmqMsg) int { + return int(C.zmq_msg_size((*C.zmq_msg_t)(msg))) +} + +func zmq_msg_data(msg *ZmqMsg) unsafe.Pointer { + return C.zmq_msg_data((*C.zmq_msg_t)(msg)) +} + +func zmq_send(socket ZmqSocket, data []byte, flags int) { + C.zmq_send(unsafe.Pointer(socket), unsafe.Pointer(&data[0]), C.size_t(len(data)), C.int(flags)) +} + +// 새로운 래퍼 함수: ZmqMsg에서 Go 바이트 슬라이스로 변환 +func zmq_msg_to_bytes(msg *ZmqMsg) []byte { + size := zmq_msg_size(msg) + data := zmq_msg_data(msg) + return C.GoBytes(data, C.int(size)) +} + +func main() { + context := zmq_ctx_new() + defer zmq_ctx_term(context) + + socket := zmq_socket(context, ZMQ_REP) + defer zmq_close(socket) + + zmq_bind(socket, "tcp://*:5555") + + for { + msg := ZmqMsg{} + zmq_msg_init(&msg) + defer zmq_msg_close(&msg) + + zmq_msg_recv(&msg, socket, 0) + goData := zmq_msg_to_bytes(&msg) + fmt.Printf("Received: %s\n", string(goData)) + + zmq_send(socket, goData, 0) + } +} + ``` \ No newline at end of file