From 6ad01d1aa90fbff5e6155cb1755e51a8921973a1 Mon Sep 17 00:00:00 2001 From: shash256 <111925100+shash256@users.noreply.github.com> Date: Mon, 7 Apr 2025 17:19:44 +0530 Subject: [PATCH] debug: callbacks issue --- bindings/bindings.h | 31 +-- bindings/bindings.nim | 229 ++++++++++------- bindings/callbacks.go | 82 ++++++ bindings/generated/libbindings.dylib | Bin 663128 -> 665080 bytes sds_wrapper.go | 141 +++++----- sds_wrapper_test.go | 367 +++++++++++++-------------- src/reliability_utils.nim | 16 +- 7 files changed, 473 insertions(+), 393 deletions(-) create mode 100644 bindings/callbacks.go diff --git a/bindings/bindings.h b/bindings/bindings.h index a450453..67fd179 100644 --- a/bindings/bindings.h +++ b/bindings/bindings.h @@ -39,11 +39,18 @@ typedef struct { // --- Callback Function Pointer Types --- -// Keep const char* here as these are inputs *to* the callback -typedef void (*MessageReadyCallback)(const char* messageID); -typedef void (*MessageSentCallback)(const char* messageID); -typedef void (*MissingDependenciesCallback)(const char* messageID, const char** missingDeps, size_t missingDepsCount); -typedef void (*PeriodicSyncCallback)(void* user_data); + +// Define event types (enum or constants) +typedef enum { + EVENT_MESSAGE_READY = 1, + EVENT_MESSAGE_SENT = 2, + EVENT_MISSING_DEPENDENCIES = 3, + EVENT_PERIODIC_SYNC = 4 +} CEventType; + +// Single callback type for all events +// Nim will call this, passing the handle and event-specific data +typedef void (*CEventCallback)(void* handle, CEventType eventType, void* data1, void* data2, size_t data3); // --- Core API Functions --- @@ -92,23 +99,17 @@ CUnwrapResult UnwrapReceivedMessage(void* handle, void* message, size_t messageL * @param count The number of message IDs in the array. * @return CResult indicating success or failure. */ -CResult MarkDependenciesMet(void* handle, char*** messageIDs, size_t count); +CResult MarkDependenciesMet(void* handle, char** messageIDs, size_t count); // Reverted to char** /** * @brief Registers callback functions. * @param handle The opaque handle (void*) of the instance. * @param messageReady Callback for when a message is ready. * @param messageSent Callback for when an outgoing message is acknowledged. - * @param missingDependencies Callback for when missing dependencies are detected. - * @param periodicSync Callback for periodic sync suggestions. - * @param user_data A pointer to user-defined data passed to callbacks. + * @param eventCallback The single callback function to handle all events. + * @param user_data A pointer to user-defined data (optional, could be managed in Go). */ -void RegisterCallbacks(void* handle, - void* messageReady, - void* messageSent, - void* missingDependencies, - void* periodicSync, - void* user_data); // Keep user_data, align with Nim proc +void RegisterCallback(void* handle, CEventCallback eventCallback, void* user_data); // Renamed and simplified /** * @brief Starts the background periodic tasks. diff --git a/bindings/bindings.nim b/bindings/bindings.nim index 27ddb91..04a0a44 100644 --- a/bindings/bindings.nim +++ b/bindings/bindings.nim @@ -1,13 +1,21 @@ -import std/[locks, typetraits] +import std/[locks, typetraits, tables] # Added tables import chronos import results import ../src/[reliability, reliability_utils, message] -# --- C Type Definitions --- - type CReliabilityManagerHandle* = pointer +type + # Callback Types (Imported from C Header) + CEventType* {.importc: "CEventType", header: "bindings.h", pure.} = enum + EVENT_MESSAGE_READY = 1, + EVENT_MESSAGE_SENT = 2, + EVENT_MISSING_DEPENDENCIES = 3, + EVENT_PERIODIC_SYNC = 4 + + CEventCallback* = proc(handle: pointer, eventType: CEventType, data1: pointer, data2: pointer, data3: csize_t) {.cdecl.} # Use csize_t + CResult* {.importc: "CResult", header: "bindings.h", bycopy.} = object is_ok*: bool error_message*: cstring @@ -15,20 +23,24 @@ type CWrapResult* {.importc: "CWrapResult", header: "bindings.h", bycopy.} = object base_result*: CResult message*: pointer - message_len*: csize + message_len*: csize_t CUnwrapResult* {.importc: "CUnwrapResult", header: "bindings.h", bycopy.} = object base_result*: CResult message*: pointer - message_len*: csize - missing_deps*: ptr ptr cstring - missing_deps_count*: csize + message_len*: csize_t + missing_deps*: ptr cstring + missing_deps_count*: csize_t - # Callback Types - CMessageReadyCallback* = proc (messageID: cstring) {.cdecl, gcsafe, raises: [].} - CMessageSentCallback* = proc (messageID: cstring) {.cdecl, gcsafe, raises: [].} - CMissingDependenciesCallback* = proc (messageID: cstring, missingDeps: ptr ptr cstring, missingDepsCount: csize) {.cdecl, gcsafe, raises: [].} - CPeriodicSyncCallback* = proc (user_data: pointer) {.cdecl, gcsafe, raises: [].} +# --- Callback Registry --- +type + CallbackRegistry = Table[CReliabilityManagerHandle, CEventCallback] + +var + callbackRegistry: CallbackRegistry + registryLock: Lock + +initLock(registryLock) # --- Memory Management Helpers --- @@ -37,22 +49,24 @@ proc allocCString*(s: string): cstring {.inline, gcsafe.} = result = cast[cstring](allocShared(s.len + 1)) copyMem(result, s.cstring, s.len + 1) -proc allocSeqByte*(s: seq[byte]): (pointer, csize) {.inline, gcsafe.} = +proc allocSeqByte*(s: seq[byte]): (pointer, csize_t) {.inline, gcsafe.} = if s.len == 0: return (nil, 0) let len = s.len let bufferPtr = allocShared(len) if len > 0: copyMem(bufferPtr, cast[pointer](s[0].unsafeAddr), len.Natural) - return (bufferPtr, len.csize) + return (bufferPtr, len.csize_t) -proc allocSeqCString*(s: seq[string]): (ptr ptr cstring, csize) {.inline, gcsafe, cdecl.} = +proc allocSeqCString*(s: seq[string]): (ptr cstring, csize_t) {.inline, gcsafe, cdecl.} = if s.len == 0: return (nil, 0) let count = s.len - let arrPtr = cast[ptr ptr cstring](allocShared(count * sizeof(cstring))) + # Allocate memory for 'count' cstring pointers, cast to ptr UncheckedArray + let arrPtr = cast[ptr UncheckedArray[cstring]](allocShared(count * sizeof(cstring))) for i in 0.. C) --- -# These still accept the ReliabilityManager instance directly +# These wrappers call the single global Go callback relay. -# These wrappers now need to handle the user_data explicitly if needed, -# but the C callbacks themselves don't take it directly anymore (except PeriodicSync). -# The user_data is stored in rm.cUserData. +proc nimMessageReadyCallback(rm: ReliabilityManager, messageId: MessageID) = + echo "[Nim Binding] nimMessageReadyCallback called for: ", messageId + let handle = cast[CReliabilityManagerHandle](rm) + var cb: CEventCallback + withLock registryLock: + if not callbackRegistry.hasKey(handle): + echo "[Nim Binding] No callback registered for handle: ", cast[int](handle) + return + cb = callbackRegistry[handle] + + # Pass handle, event type, and messageId (as data1) + cb(handle, EVENT_MESSAGE_READY, cast[pointer](messageId.cstring), nil, 0) -proc nimMessageReadyCallback(rm: ReliabilityManager, messageId: MessageID) {.gcsafe.} = - let cbPtr = rm.cMessageReadyCallback - if cbPtr != nil: - let cb = cast[CMessageReadyCallback](cbPtr) - # Call the C callback without user_data, as per the updated typedef - cb(messageId.cstring) +proc nimMessageSentCallback(rm: ReliabilityManager, messageId: MessageID) = + echo "[Nim Binding] nimMessageSentCallback called for: ", messageId + let handle = cast[CReliabilityManagerHandle](rm) + var cb: CEventCallback + withLock registryLock: + if not callbackRegistry.hasKey(handle): + echo "[Nim Binding] No callback registered for handle: ", cast[int](handle) + return + cb = callbackRegistry[handle] + + cb(handle, EVENT_MESSAGE_SENT, cast[pointer](messageId.cstring), nil, 0) -proc nimMessageSentCallback(rm: ReliabilityManager, messageId: MessageID) {.gcsafe.} = - let cbPtr = rm.cMessageSentCallback - if cbPtr != nil: - let cb = cast[CMessageSentCallback](cbPtr) - # Call the C callback without user_data - cb(messageId.cstring) +proc nimMissingDependenciesCallback(rm: ReliabilityManager, messageId: MessageID, missingDeps: seq[MessageID]) = + echo "[Nim Binding] nimMissingDependenciesCallback called for: ", messageId, " with deps: ", $missingDeps + let handle = cast[CReliabilityManagerHandle](rm) + var cb: CEventCallback + withLock registryLock: + if not callbackRegistry.hasKey(handle): + echo "[Nim Binding] No callback registered for handle: ", cast[int](handle) + return + cb = callbackRegistry[handle] -proc nimMissingDependenciesCallback(rm: ReliabilityManager, messageId: MessageID, missingDeps: seq[MessageID]) {.gcsafe.} = - let cbPtr = rm.cMissingDependenciesCallback - if cbPtr != nil: - var cDeps = newSeq[cstring](missingDeps.len) + # Prepare data for the callback + var cDepsPtr: ptr cstring = nil + var cDepsCount: csize_t = 0 + var cDepsNim: seq[cstring] = @[] # Keep Nim seq alive during call + if missingDeps.len > 0: + cDepsNim = newSeq[cstring](missingDeps.len) for i, dep in missingDeps: - cDeps[i] = dep.cstring - let cDepsPtr = if cDeps.len > 0: cDeps[0].addr else: nil - let cb = cast[CMissingDependenciesCallback](cbPtr) - # Call the C callback without user_data - cb(messageId.cstring, cast[ptr ptr cstring](cDepsPtr), missingDeps.len.csize) + cDepsNim[i] = dep.cstring # Nim GC manages these cstrings via the seq + cDepsPtr = cast[ptr cstring](cDepsNim[0].addr) + cDepsCount = missingDeps.len.csize_t -proc nimPeriodicSyncCallback(rm: ReliabilityManager) {.gcsafe.} = - let cbPtr = rm.cPeriodicSyncCallback - if cbPtr != nil: - let cb = cast[CPeriodicSyncCallback](cbPtr) - cb(rm.cUserData) + cb(handle, EVENT_MISSING_DEPENDENCIES, cast[pointer](messageId.cstring), cast[pointer](cDepsPtr), cDepsCount) -# --- Exported C Functions - Using Opaque Pointer (pointer/void*) --- +proc nimPeriodicSyncCallback(rm: ReliabilityManager) = + echo "[Nim Binding] nimPeriodicSyncCallback called" + let handle = cast[CReliabilityManagerHandle](rm) + var cb: CEventCallback + withLock registryLock: + if not callbackRegistry.hasKey(handle): + echo "[Nim Binding] No callback registered for handle: ", cast[int](handle) + return + cb = callbackRegistry[handle] + + cb(handle, EVENT_PERIODIC_SYNC, nil, nil, 0) + +# --- Exported C Functions - Using Opaque Pointer --- proc NewReliabilityManager*(channelIdCStr: cstring): CReliabilityManagerHandle {.exportc, dynlib, cdecl, gcsafe.} = let channelId = $channelIdCStr @@ -125,47 +167,49 @@ proc NewReliabilityManager*(channelIdCStr: cstring): CReliabilityManagerHandle { let rmResult = newReliabilityManager(channelId) if rmResult.isOk: let rm = rmResult.get() - # Initialize C callback fields to nil - rm.cMessageReadyCallback = nil - rm.cMessageSentCallback = nil - rm.cMissingDependenciesCallback = nil - rm.cPeriodicSyncCallback = nil - rm.cUserData = nil - # Assign Nim wrappers that capture the 'rm' instance directly - rm.onMessageReady = proc(msgId: MessageID) {.gcsafe.} = nimMessageReadyCallback(rm, msgId) - rm.onMessageSent = proc(msgId: MessageID) {.gcsafe.} = nimMessageSentCallback(rm, msgId) - rm.onMissingDependencies = proc(msgId: MessageID, deps: seq[MessageID]) {.gcsafe.} = nimMissingDependenciesCallback(rm, msgId, deps) - rm.onPeriodicSync = proc() {.gcsafe.} = nimPeriodicSyncCallback(rm) + # Assign anonymous procs that capture 'rm' and call the wrappers + # Ensure signatures match the non-gcsafe fields in ReliabilityManager + rm.onMessageReady = proc(msgId: MessageID) = nimMessageReadyCallback(rm, msgId) + rm.onMessageSent = proc(msgId: MessageID) = nimMessageSentCallback(rm, msgId) + rm.onMissingDependencies = proc(msgId: MessageID, deps: seq[MessageID]) = nimMissingDependenciesCallback(rm, msgId, deps) + rm.onPeriodicSync = proc() = nimPeriodicSyncCallback(rm) # Return the Nim ref object cast to the opaque pointer type - return cast[CReliabilityManagerHandle](rm) + let handle = cast[CReliabilityManagerHandle](rm) + GC_ref(rm) # Prevent GC from moving the object while Go holds the handle + return handle else: echo "Error creating ReliabilityManager: ", rmResult.error return nil # Return nil pointer -proc CleanupReliabilityManager*(handle: CReliabilityManagerHandle) {.exportc, dynlib, cdecl, gcsafe.} = - if handle != nil: +proc CleanupReliabilityManager*(handle: CReliabilityManagerHandle) {.exportc, dynlib, cdecl.} = + let handlePtr = handle + if handlePtr != nil: + # Go side should handle removing the handle from its registry. + # We just need to unref the Nim object. + # No need to interact with gEventCallback here. + # Cast opaque pointer back to Nim ref type - let rm = cast[ReliabilityManager](handle) + let rm = cast[ReliabilityManager](handlePtr) cleanup(rm) # Call Nim cleanup - # Nim GC will collect 'rm' eventually as the handle is the only reference + GC_unref(rm) # Allow GC to collect the object now that Go is done else: echo "Warning: CleanupReliabilityManager called with NULL handle" proc ResetReliabilityManager*(handle: CReliabilityManagerHandle): CResult {.exportc, dynlib, cdecl, gcsafe.} = if handle == nil: return toCResultErrStr("ReliabilityManager handle is NULL") - let rm = cast[ReliabilityManager](handle) # Cast opaque pointer + let rm = cast[ReliabilityManager](handle) let result = resetReliabilityManager(rm) if result.isOk: return toCResultOk() else: return toCResultErr(result.error) -proc WrapOutgoingMessage*(handle: CReliabilityManagerHandle, messageC: pointer, messageLen: csize, messageIdCStr: cstring): CWrapResult {.exportc, dynlib, cdecl, gcsafe.} = +proc WrapOutgoingMessage*(handle: CReliabilityManagerHandle, messageC: pointer, messageLen: csize_t, messageIdCStr: cstring): CWrapResult {.exportc, dynlib, cdecl.} = # Keep non-gcsafe if handle == nil: return CWrapResult(base_result: toCResultErrStr("ReliabilityManager handle is NULL")) - let rm = cast[ReliabilityManager](handle) # Cast opaque pointer + let rm = cast[ReliabilityManager](handle) if messageC == nil and messageLen > 0: return CWrapResult(base_result: toCResultErrStr("Message pointer is NULL but length > 0")) @@ -191,10 +235,10 @@ proc WrapOutgoingMessage*(handle: CReliabilityManagerHandle, messageC: pointer, else: return CWrapResult(base_result: toCResultErr(wrapResult.error)) -proc UnwrapReceivedMessage*(handle: CReliabilityManagerHandle, messageC: pointer, messageLen: csize): CUnwrapResult {.exportc, dynlib, cdecl, gcsafe.} = +proc UnwrapReceivedMessage*(handle: CReliabilityManagerHandle, messageC: pointer, messageLen: csize_t): CUnwrapResult {.exportc, dynlib, cdecl.} = # Keep non-gcsafe if handle == nil: return CUnwrapResult(base_result: toCResultErrStr("ReliabilityManager handle is NULL")) - let rm = cast[ReliabilityManager](handle) # Cast opaque pointer + let rm = cast[ReliabilityManager](handle) if messageC == nil and messageLen > 0: return CUnwrapResult(base_result: toCResultErrStr("Message pointer is NULL but length > 0")) @@ -221,17 +265,19 @@ proc UnwrapReceivedMessage*(handle: CReliabilityManagerHandle, messageC: pointer else: return CUnwrapResult(base_result: toCResultErr(unwrapResult.error)) -proc MarkDependenciesMet*(handle: CReliabilityManagerHandle, messageIDsC: ptr ptr cstring, count: csize): CResult {.exportc, dynlib, cdecl, gcsafe.} = +proc MarkDependenciesMet*(handle: CReliabilityManagerHandle, messageIDsC: ptr cstring, count: csize_t): CResult {.exportc, dynlib, cdecl.} = # Keep non-gcsafe if handle == nil: return toCResultErrStr("ReliabilityManager handle is NULL") - let rm = cast[ReliabilityManager](handle) # Cast opaque pointer + let rm = cast[ReliabilityManager](handle) if messageIDsC == nil and count > 0: return toCResultErrStr("MessageIDs pointer is NULL but count > 0") var messageIDsNim = newSeq[string](count) + # Cast to ptr UncheckedArray for indexing + let messageIDsCArray = cast[ptr UncheckedArray[cstring]](messageIDsC) for i in 0.. // For size_t +*/ +import "C" +import ( + "fmt" + "unsafe" +) + +// --- Go Callback Implementations (Exported to C) --- + +//export goMessageReadyCallback +func goMessageReadyCallback(messageID *C.char) { + msgIdStr := C.GoString(messageID) + registryMutex.RLock() + defer registryMutex.RUnlock() + + // Find the correct Go callback based on handle (this is tricky without handle passed) + // For now, iterate through all registered callbacks. This is NOT ideal for multiple managers. + // A better approach would involve passing the handle back through user_data if possible, + // or maintaining a single global callback handler if only one manager instance is expected. + // Let's assume a single instance for simplicity for now. + for _, callbacks := range callbackRegistry { + if callbacks != nil && callbacks.OnMessageReady != nil { + // Run in a goroutine to avoid blocking the C thread + go callbacks.OnMessageReady(MessageID(msgIdStr)) + } + } + fmt.Printf("Go: Message Ready: %s\n", msgIdStr) // Debug print +} + +//export goMessageSentCallback +func goMessageSentCallback(messageID *C.char) { + msgIdStr := C.GoString(messageID) + registryMutex.RLock() + defer registryMutex.RUnlock() + + for _, callbacks := range callbackRegistry { + if callbacks != nil && callbacks.OnMessageSent != nil { + go callbacks.OnMessageSent(MessageID(msgIdStr)) + } + } + fmt.Printf("Go: Message Sent: %s\n", msgIdStr) // Debug print +} + +//export goMissingDependenciesCallback +func goMissingDependenciesCallback(messageID *C.char, missingDeps **C.char, missingDepsCount C.size_t) { + msgIdStr := C.GoString(messageID) + deps := make([]MessageID, missingDepsCount) + if missingDepsCount > 0 { + // Convert C array of C strings to Go slice + cDepsArray := (*[1 << 30]*C.char)(unsafe.Pointer(missingDeps))[:missingDepsCount:missingDepsCount] + for i, s := range cDepsArray { + deps[i] = MessageID(C.GoString(s)) + } + } + + registryMutex.RLock() + defer registryMutex.RUnlock() + + for _, callbacks := range callbackRegistry { + if callbacks != nil && callbacks.OnMissingDependencies != nil { + go callbacks.OnMissingDependencies(MessageID(msgIdStr), deps) + } + } + fmt.Printf("Go: Missing Deps for %s: %v\n", msgIdStr, deps) // Debug print +} + +//export goPeriodicSyncCallback +func goPeriodicSyncCallback() { + registryMutex.RLock() + defer registryMutex.RUnlock() + + for _, callbacks := range callbackRegistry { + if callbacks != nil && callbacks.OnPeriodicSync != nil { + go callbacks.OnPeriodicSync() + } + } + fmt.Println("Go: Periodic Sync Requested") // Debug print +} diff --git a/bindings/generated/libbindings.dylib b/bindings/generated/libbindings.dylib index 6c5302ec81e9377436c16305aa3775f4d584c24b..8fb1999cb1c963e69f3e694414b41fd63368adc2 100755 GIT binary patch delta 151974 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 Z`ZnLqKZrLfBz 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Ð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 delta 141732 zcmZrZ30#fM*UdcLTjAbzT2N6b6^T-k79tXf?2&yZOZJe2ToHqVEZKJ=l-HIuyYTYb zWxrXouid^g^Hi4q=l5e~&YU@O&Y3f3&MeRM^}Nf?LoR8v%?d*F#Gf~T1|ls8S+Kl` z*`?`n>4jXWcWL^97fsA^l4R%-B7<|1SR>NJGBQ~P7e&ZmUe;&r3~bqEVs9FBO|Bj9 zF4qRJTO`mjr$mN^m3F|(RJ55U>1Va3l?W}Up4C;lLC8{8Ptl2XUd84pj(FJ5Gt{eU zq^IZNV5H|+tfyBI+eentcx7{eGt!G<3y8UuEyAtv@9f*3Tq};N zH+5&8W><`Q;&hg)9HYv_2Ci6Xf`89s1sja0kezR5=xM(R|256ZG~H#O+A-TeFDxZA zH!M|ga5giswPwlIRSjpz(0sP@R86{UHoIh9pE}NFhNpY5UN#e@vp)^keH$m$>sjTE ztIWd2F7)-xtVXt$6{ypDwkFC&`ti;Hwm%@&^qm0%r`D?Dlgk_YGno}RxzM!9%*HuD zs)h(%ojp|JWrWSh&dA9ux4t#o;cQG>OlC)%pQ<)bDsR1h63eVLf=0g;-MGCqV3VD! zDJBD4nn~Z@7_gl#_Efil<-1s@4o(!!W+Tl$6SLmAY$PKDd^1~$;Nv5Q1g*&r&l`~|3qjZ{D}c{ z|0!A1CkCuV{brIirt|7MsaD37bC({6+y%M4x+@^sFiog7EX7bHsj6gw7iPlw_Llkf zjAQ=2YmgDFO@lhV_eO|TIboUzY;`#-)mz0|q*@*n6~}^ecq{D|hAbk9i8!H9h;}2G zXH)~GZBSQ=d4wADc2)fxE(md(8#$asdXG@Q5|9Xls2&eDfMd<2s;to4+-d{h8C!#1!qk6EE)$(a#w24DBmYbKd;XZCgNpfk%QnuE|(Wt*%8nBdI z_VJ<8Wncs_S6@f7 zx^l^rC#eZV+CahM!b}=F zvl6VSEZ0d2Un4l4AXiRY$nGL)cexa^ zkQp^`GzyeUK?|8rlfg!J7YL&F7O*W%9LKNSyFm9M21VM0GA^JN7jIQj6L!gW%58@&;Sb!jrF7aBEfPUIO?$*k<2w3pO1}hibgv)GBz5_Q%&eJ4m95H zsf{)x0?yYml)^z4C<7v&C@s1ddLT!<)eyOMRXID!oYydoXILsub@V$asRKFlw`Oqa z<&~O9^kaubjU7_Z4ld@6LU9H}e+6|YwPps_nn>1qdMxakFKNMgb*e8_z*6=#M`F!Z zH1}ecS{kYr_Yg|p-q)@tdS7dm$q(#n8|Nt{^rlc&)mA3;r_Dh;jVck7)*8ihk*Jb5 zFjX-_luTNuSU84hf(*k_nmHP3+x}!dTX@k)KOn9@tp<@dl@;^@w&e4L%9?!%si|ru zdXAWlgY+YY)oN;Q^z<9{JPk!G9T z4_YyX{TCh^ph)DJiO)sR(OPg6JNy)?O_K*Cc|6x=>6m;|i7`nl9g|bt+0kY#)g^pk z*Ldq;7@(D2vGc86>8oxmIMl9st!YB*k)=bzwa$Bp<61iS71}M9s415*_iv)Jv37WDiVp);1*%B_;1DwH&& zD_4?1^k<}6^nvt0bwc0YiTN!?% zPi$(SEql<`AW$h+8HgldvsU>@=E??{IYK#W8ic0FbP5xN2roo};9DPAL7-zL6C6`3 zfw#pG-L-{veHnd)jJ~oAeey>(J#va?h8|bV|G4ki-{Q4@ItY}_sNS3o%(GpP``)7h z@>g_~A@JnrDqZMN5zzsoV;AB;qS%pkjeOs<7wvwFud4Dksg@T+1;$sroz`P4O8P6l zy50`ss}c12NfASAJ81wvM<}exN%kx%lukIwJlfk(kCUurdso$=DA57>1jV4Jg(22# zX?v?GJ~HrTUg#mD&UN@zYo=4Oy!Jh%F~v&e+9AAxbForS3&zMRauMc0wMe=6DB=-SmI+K8U{@_<7TBLv9bE^EOe zlKmU)Pd`RvnRZlCsqmYU*>sLporx%Cc4!1=c5!FpDj_lunf+MKtRpr!*x6ClTdvDT z>3+6muR6Ds(!VO1Z8I-4T9C{|j91}eg|zHy<9_Okl8hw%S30X@@ zDAF^YtH2HlYYUA8d>_Y!^8PW7b?X|g+8!>*@CoG|E+*84uCCIz&r0^SYjvaMGH#1; z%&yy0qk&^Z%RytAs(TdGwPd}zPnB{%D%s=i4${r~ggrNPljbxaV0v6KHyqOdopI7h z6IQg!0Ug83uyTHro3m*#F0@;7wl(G{eVQW%`(Ta%yy}mGox^VQ2sXMtTJ&{eG_&tn zg$Cp>zn=S5@y!JdZk}!-VnbyaYfMQ9bB=AQJh9(EucQj|Tu_y1Vk^-$)jUQLXi@)%#^{Va}U^s1>!4Jjw531RuYg4}-Y5RkvD-KrIb{;`*^4`FT% z9O$NC)}wbF-;2Sb*>A?4(Gnr4mfJ){*=Ax{zdwvUI9O~ZzV`N41vf1vkg7Nph@;>_ z(*xPyKKoQ%Wfu7;cM1`s9NKq|%1zb-xBX4Q+?+o3HKqx{Oxe#*buv_t;&ly0UB7;9 zR3>E%rYcSZvD|(xbXgF4(eJFvCaApQ6M-zZ{|8mgKmp-8KG7sAcR*XJB64fa#DK4abwJ-CNzq)dVLcfz0L4j!#K;4dg}^rrqSXvj;|=|%#AGe&W?5%V4D61iH2 zXv2~MW*49XHcl2MiW@?`63cN2K?5%E6b7pZ>y1T?FK*GcV=Ju#hhl9#OpoHWOix?w zsgh+5^^nprEf{JSOrDBKP>>gT7pt)?dV#Y~lzJ(lchMj{V@{OrRC(a~H7q5*2>Gfm zGbEVyV?o1QsI?y(JS=;)>q*0#*Z6j zWeh(-RJO7bcr$Y!78f@_mFgpq_)J^vEoNGA+zZt#Zvo{o+WZE5y=1CU|ERY&5YP;S z?y7G9(=JF>S+7U=5LN$%zD}DQ<*xabGe?Nb8*aCmAee(To}|7 zekZ<(YI{9FV>1HRd1e*FUn8pb^#zFIov6cd$Bk8Wty_*1gpm5yS>4CC&{t9C^8UX& zvCPRXG~bEcp4?KEQb$y9>Ds$8&jc@et}g4F5U#2qS8&pKE<%3^ZB!Foe_^{Y&nYg{ z)rEDPvP^Z=T~u)Fq*@E7W~r*l0Iu4}ZY+1Ii*1yfK*`SweN{HP7#|jC8(&p2X_}{M ze64a4O`TcLwEe16znGrp#O*h$YT|QAbyo)SzD7GRljL=(2EQOD?6Y!{YZH~Blc2`? zpKB-Dn#^)0s{ESeodi`!sj|AyHXy1#)ytvg)mU6gCzXK=;cD4cl@EH>>l7TuIWm}2 zZI6+bW+Z*-z}9J8=mZVBs2QaKTS17A=7Gv$H2cjprt>Rjjh!1wjXra4p|SkZlwF=@ zXLMgKJ!s0lVCl46%4^E(=08!5tSsp8?mw9^le7n_H!_4%HZl{GEf*Nm2d2z1MMjh^OJu4gwN#e6-3{$aF4oFV1Y{m=_VsKZRrcu9CbMhnTA4P zY0Fv?I@f^RS?)tE46@AAZHel9MS;aBy;5*WSshk{5_&6Kw7!wl31gHi>#Ng%QS9CN zw$w{vAseElc^HQ*-{3_zQg&%WP3k|Aeb`W^rvA^eK9a?LCMCHu-_~GH-Q}KM#Ia@@ zXV9&Lo!c0xs`#T6JvE?V9ILg-jou!?I&5;F#d>VqrY2I{cO}c&)Pr`{V^*6ZO%H!7 zqaKQ?2zWZ2P1w9#U0GHz9|i*qTpYG|R{r;^K+MICa{{>YO;u!~Py@DjNpmrBS+ONa z?I&x4tMnFvJhs-7c469S>nzi|7@LKqlG`7{cal zbD#-B*zRo!w9XLbxqTwtGnj4P?nE_%*|qKAw8>y*zoQ{l3}#(+^rmYDvBNt$(VP+} z3RBuJ&z&{Z@!tiLd|KpvP_kY-J(cML`M|-@s-!B*+G$_Cizwrk*CZ_ItDf-;u{>24 z0tEyNWbbx5(kcU4m0exw%K>cku7TYvgffs)py~1d{H_1P-4xuH5BbX*(Q;M)Ek!#Og;Uy(H6nN@%@Ra$$j|Jk=}j zmeb#MS7vYVsm9VG%wM*y!d{-TmF(^+vy4vr5E>E5g7d1;I*}|kuMUk!W@&krv|%#a zl;=gyw`F(o-08)(%;=0g-PV@5omozIwPAT@y3wdMS&nCaC{)8_b14YZCj}geQ2Ebz|LJ{Tt~1L|#_^3eX1L;D~<&X!)1X z*xETzOm_Y2;g@h(koqk`E4q%5RLgFnqAWsdiF;MF+_K}|cbAl`UQ~S+cD)7N7o4@= z`f)?mj&p(%pZ5kQao&5<>nGU4`@L=L&x(r8e9Fbj8t-vJ2El?(`d%#f!9Y6X4BPgg zvnt|bDQ>DF{3J6e2y%D#6z=3N!JeGwcz+01Z~}KB|2mKpY*j%Wzf`%0-{cy~o1|I} z5fx=}b$R}WTm)<v@&kn-i(cD`i&Vqd8KAcdxLe#`66uC9{0CwnDUA?1;r<&vGlI zzZA7AUMiX9dGiY0%Ux?~vFK`hqtR=0*P|Tyy)+KJB67L=Qm)#8n z{T6X)4`7RwP`>;=Il$ryUFbgt*z!Vey1|28DRiq4StuyBD^xP&3wui+x!4dB?Kv%q zlN#Xfk>&s5F{NGmG5gnUQp!UmYx6p?a__!^@E_q{?Y?a9Yj^sg2Yd87gl6_&&Tsaa zeRJV+K1_pB$N3_?LKpV>O$)UzhKgbjrBQf4QD%j_4J8#mJrc}(exzgzikvFkkc}hx`d;Km(eQCeI;;z7bub9bMaqpd}>AbxhUgi|J5yybgS#q_^5yhI2Z02uE+2ogfj6w+hya23(wL zYqB%-NqeGNw62`N(HYq$O5#J*J=T`vdE!EjUO0QG0hy(s?JB^hN@Tf_>NFx~EY+uB zsfu_SJvk+cPfx)WUOXrl51oPvYAi04i|iCM<;6jAaquaa%!@&CG58ehih7gB>PfFow4 zj^D5ag4AygXxTD^q*{iHiZTb}x9<-J^e|00pzO}(WPrZvqf8?o+3}kT7pf2sbMp{= zzRA0p&d)IT{_Rn4b|ov)M^ev86&-TZNtrE7Cws9i@uC&_@#&-S?!RA_F=nQ~<1%)e zxuiOZ*x`eK{3T*%yoLNr#G+(2sh|c)hI!Rd!j;LQ*>4gSa28T6Cy9zO2?uTYLqgMJ zAtAWf5m1-R6(solPoFO4KRmS~=5*Nf?C*BOl&E*k76@FZ*NA{Y0@QOLE_Cbk>~0QZ zwxqf}qm+qMh2>NzawPV(FKj^&o@0jN4Lfd+wa48>c{8^L4mT49p@^NPgp8kxs?ej7 z!Vr2m5o5Y!3XE_fakO|dJai(KmKAu*l+dNTRq3hlys1#pnN*#+Z?oLVAl^x;>S6-N zjNtclc$dQaHAKIekfhYh;XCoLl+$4;$F=L-5KE()z}u$ar7V&ijP3J6@wlJ2@zeH@ zF*+eeO6U`gFjPq4r|pe3+WEey%cPTWF|g5@xKd>1iZgj+l){~q#&XVfI8=*_Q&pQR z=<^Y_oeV)PB*?urUnF>!f7}K83g!J_#hH_o%)Nm*_xS`N~Auj0d_BbeOe;a>VNc*YUDtesUw{h*2u{Y8uOV8{v!xu``O7i(@xJ z5iiEb#U2~8t?H2BRP|YQYd6C*iVy3unI}mlMnkz<(^w8$3$9+o$*7H7Y`YdZ@uH_( zthY8h*^BHZs>Sg_nAxZp$Kl`~Ost`M15$;)9|rLaNN>x4(W0J@ciLz^BB_c=!{Ai| zl0j#Wf_dIJn>GxEI*x^gOj9#a6T<(X zB+uZq*B%k)J7dyN>sUghEdtkaYdSRcBehiHWcK*PT09uy{K$AC#}%SyrxozdkGL99 zxhSoGnvJknAh&;*4$-`LL@pjphgrP1LN2aMhXcGgQ7%qOhnKwASuS=-hid*<^pT4V z)1fUdTF6DqbV%gI_uO-8EI%xVEMCl)i&vJzQ-2a=lq?r#E{CATB%B5>ht$UCubr2} z=ElUHR$30{8l$={Ed!GPVo9@?L9GCUuUwYhGJu#-vzxMxxW~LDXJO<-gUXN;NUSCM zn@U(6NZd`c%=q*=8P+G_B+k;u|0&@vuh08Wnf)~oS4&l=K|pd{sVVtHZ}fpx&B*iY#jb=BnrsDr zHUu96jD$fpWDY%B1)|-^Bvmg#FBj?fb(c3X%1kY*TzY96mustUS_KP%!BttsJ-&uU zxP9fv$8aZ%gpw8D(2`W8fde71C9zlUjTOYW{NK7N+3U_${+%qv)V#U8Y{h6UNxv;2 zp?J`jcO(w2UAwX`E|E7mdeX_Dm=pcez}|{P((aZp%8Cr3t7pKjaN-D(HF2PuEwVp{ zqlc!8&A})FrRp~n{36K2if4Oqn+(keE6HW=aw^j^X3()6X;dkuoUsX=U~Vg7)5!EM zzLx0yFJGNGU)7MLwzJvaeBCvb`Laudx@}1)bulev$gwyDclFt%$3)vZVrbyv$gj7We7 zQOLu1Rkm|`u9kk4z^?=H;N1@fbs+m`LPccQA^*nt@>rTefnOy0WYDYW3PuaM{#3@cIAzAgTT%KZp9*@Jjc zHwqtmpdd>}f=^G3 z!`7Vd%8(dK%%$0g2Z%>nLQX95wmBTW$0BbtMj&qk_$2bkMIiaiW!5!Q9?hebgN;_a=T8zX{n&Fr}K=5~}tg9jIqZ z7}W>)7+ef{`(TUzhQgOV#Gfu73Jv;_2BbL*>WhTu{Deh)k#N$_?1OztJEBf|g|>l) zCeEOrblcTYlGx*C{ZsKQW{gn#0omqzP^Q9d7nVYIfhD zq(55Hw{PGy0QX7NT_A1%aU&tHVgOpyxn^*40II49e8XbpW%w|pum(TX%L|>oNY-ta zX3%mVsjb}dRaa8@2&#qZ+rpxOq^f;Yj=X^*A#&-9yS4#>zch4UUztNQOL&Tyrs1cA zmCsI+DUJ#Tvq8j-KKKHGgK+V=_a(d6AmUEw{Le6dFdD2!TX;8^)TKW^L5(5AUwW)n zK1+vy_~A%r z{Cn7lW%WauyG+y`Z74Q@_Ob79`rdIt{_wd43X+3w{fVj zPg3P~H{Q5P;FzM0qH$L&!yE+6yS9w&_8Yc=j6DspaW$2(KcF*3=Tb?=R{e&3OVr3a zdJR4Rg4vTvb=y>b-n->gk*L-;Q0fKe+($XJk2=G#$+$M>ctV}}sKA+?pdCqiS@_Dr zbA3D#`cUQ6hnP`hI;jr@qsW>HZXw74*3MIc{b*tZ>+m1bdRt{+e|ea5eBi=pG&L{y zI-0l`Y=3}0w#sX$H3s7nn@m`3fze~?7}BXyL(vl70S4@NgRD)K#t|xRGOZ=4XNO93i*cwl2tK{+GM7%wf@bEdcCNE?vqsD@JJaISg z8~qoVtR65Vp7LQNXJ_+!ySKUT|Ao@Y;9Yp7{cf? z9%J(80&P$XTpCAwEA_99GYgfdr*$s`v+=}Pg+qpW7q5RlPx;5%=oJGa@7Jw;2(cC(j6r&cDxy`rVMS#2mF)SO2MAg%^d`7H{kY~hb zCwWE$JAp?6&IoxUoBP|0812Gm#3-mKa1@PRzXvUoFr3)n0~3-k8Z^Rb_j`b9cn>Pi zAQLOqDraeegB+mV`HQ9fTZIDtV2QuV*H+^*u=CwNS&EeI-VrRMUZKa`;!}ro3FTxZLvaFX|q4 zzw#zH%qMkJALTYewbf+R{`Z$0_yC6w;)a|p68i+#PVjUI z=}{>~h5X?blDEq~I-3|0rQ$q>M^7N21F21~*MyX%I8*$r|I~u-IdEQv!?WO=NV<_T zFg+1triKuhj@zu8dD%YGi5VfMVc7~Cj>UFxb_H_$&EijvznM$>h4v-5v|(&?hOgrq z%dxs2>ri_{*qs}Qq{pJPH>(Q2L2g8i@#M`>Qj8;`f zt5$|K*$a+rAl7x_3`GZ9!?0iMNj_M5CH#^1Q@(C%ET8d&bK&g;)*DC~O$vf-8;Dn} z%YnZ)B66b&a-)i6jat&=yileORX`i$@OX6#NFq@I($q2Th7}>|uSY`h9%4T&hJw z1;-fR{Qd#W2PKF8acCNeMDWnm^uJ<37o#{-Rv(;XET(~-UvU|<{EM1NoJ6YS9Z^ws zgnHHiJN7uOg*I-*k{>Osr~a!;nRswXytUru3m!khnI)H-wVll-qZ=9}0f# zBX!Ew!R(gAS-Ovz-7QIV^=ySe%0;A?-xd5U-R${(F$>Os(2wHScLf-@)I-Y;rr*9zoxzr!^P2-mQ7)qp^(O32)I|Ob6kHt-|=@1p&qbdhH|G z>7&<-v%&|&_5$65qjQ@4>9O{xK=C$|X&RN$G$gK&*wVnfqU`fcv_FDNc%WPr3U(0V zs2I^o4w41Y?R=(`6Kx_B1#$Fmxs)fI(ODcRDPY7}JdP-R1t^|bXcRGPA$TXT(I=rL zCD79t{omA2Fn=epxBR*07qYmp&?sK4fs;FNw~FU;?{<>vG=3J-a+ri4h~PtWZIwNcmq}dI-R0TF_aqI!DfnTOZI#`^?(#qLy*gLgv9Fc5 zZ_w`C4W7G6Fj)tqc9Q^1GIyipj{ZfV^H)KE`ewrC-FPr?JQJ$!A#Un{AIqn7ua9C% zn;qRHI?3eL!23qAaDcWNFzy?~-)FW_>hP zAN)}+_FnVf5y9SmI7wNP!3_aHn0RN46yp;6aDb zliOgc2W>{DY{T0Pe6jT1rUabo&`z{yD@>_FM;dt8po{;gfOkF=k5uc@megh|bf`-s z4bE&qMgtXatSRx4{H;siNnOOR!l8I3Ry|bT2F7~Qs?r>*5?JhseGT0Vv>qL!+=we^ z;V>w|_hFD$kH*r;o8Wyt8cAz!f@WUSUs_qY1g3k@33TK}DCU4CmL=d{9|1WVV1IoC zxFO(UeWa<{0KFQ}o%B?9*u9syNa=W1UC9y8g1f`#y~NYJ0k>8jQpmn3H6WlnEc2!w z>KE^X?)cVr(t#Ev)lFop~YPHD;*qTJULzfYqiYFby+w z!x}h?sX--NR|`wfhj104K$XD9mpW3jHPGD`t0$OX_0ZDl!@ks$PR)R~yylrP*4)yQ z8%Fxk`m}I0B>T}ox_LF6_M;8yh}BTyM_Z^zy)Nf=_-mQlp^d1qaWffy1~>8r+LOb< z_%gMH4UMRcow-)D;8%aSEzqH$oUdP%f;6E8kakSpx_bO79IQ{=5H#d zdGtA0`qKt<>?;WOr+(5>RSC@Ur>?ZdbJ*igo#^6~aLb=Ir~9I1)oY@aP<0i40*a}@ z07YFRk22juNi)2@T-k+@w-)-T0XsT?YXACgx8tqJv^Di!nWU=6JTX;XURKFr61DAPs! zq~zBQ)AlhO2*g9y*~{QrAnIZ7b5I3Q2V3v^zc`sJb28<*41(YisS3mfQI&MLqS&@~ zqf76>MLf`wI!2d3VG#AAg^^G#n0BUL0LBH=1Zh0z01B0UsB``OHHdpyQ z6-3ieibqf2K?wDwo1cJnQ#!)3)dNwLf!r>=DjzX9K7o}@X$N}gF??uBn@LagOQ2CR zI+a@Ahl9;fR&KmXAi_BM1tmo(*iwp{43x9fiD7%oEP$i zlO2L!^$>+690)~G$0|!8e~rFPC5`uhiekANSWyXYLusgO(L?Mk)$+PXR0)^_3nJQ{ zKcQ`NT35B3*YF`rRroy2)-JKIwW5#j!u?jXKfPHD&BN(Rnvx1n!|5>fk2|8lQl#Dc zj)L{NZw2F9qn4b0!nfA6Ep?m=ts*eJrh)Vbie~=GChLe$W6n*vueB04^bmJ^I z(+-WG#uxb64(WT(0>3EgL6x&$U=$6Yc{5>C6b|FanNS=>Thp2|A-p|(X7utS+W1d3 zM&P|VP%8-UPAk&YZ=q)g#62(r_I03r4J3|Zp@!g&=y1nJqJIjCrg#LO1WD0!k%8g^ zR##TZ)m|NGDvfy$$2!uXG;li9?S#zic?Ux~(I)hGB5d!3OtD0`(}_-@=84d)Go4LS zroq$B$dvyysNaP?qtaWj?MiFY>_TYKl@6u{r$81j&z}Mhy3*=&L@XS8ps>Mf7Wyxp zngDORVJGijfqQpE+V~tgcc=a6#$#}_J4&8=7|jc#TyUI7{$_RQuA&l;2KL`OC87Sz`7TX&)Me? z-3xn5cm#>P=x93P5Pa^1y`|)UcW<0gQKw);Z`zxNKZ9$%X{gj;tS;NO58Xxdz3@l~ zf`X|x9W;hdR9^__M;+83kCz)z$K$dA&FDv48>|?O+Fhi_bbA|^Tv>zpF5CfW63%FA zJ_FnSG>Oi81R4FQi^<$$oI-N`CqC&Eg}HduK<|^$kUap`=PG@ncmVaold*;ak;I`KKI|i4Z+a!Yl2~9`JJ* zwWatCuJv&0WaU)WOcS4hp*o)X;(n;GRta<*j&>DYQ(ng0YAW&f9Bc?af_ABE@k7L2 zzr_z1Ybc?@2wGQt?||qr1BFOCP^yNWBWSHgZRCnf6i0sQ6^8sAF~ongKk#@N9jZlD z;ZRXJJZnrb6iKS8&w=dR5ws<-`EV7naE%UA$QwuRr~>RtW7)m{YK}xFx9uvlA4!|m zy0~3%kogDh6}|*$EU$`{AWu8pu>=ldBgxucDSkG?AxkvkanIE~U_T1O5XAsAqDb7s zA6Hty^ikA~PPzf>utwkPN|~*<>@VAT%xH{&&h*o<7T5d;gNLJO7s;!i4g$u|Zqk$e zItV|da8hj&eem%;xJisJJRL*vmpx>7=`VY1f;#cEzT}7)MyF$>ZGCiX&}k1tx4m5Y z2rcY7FIj`xSlU4Scu%RI_?5{XIZzln7M*$I9+)|nwy^EM>r*YGMWXt)o3AF_xxP=I z2klt8iB_}2(4z`lTCcN-UI#&|)HwU6v4SZUmDZQ@dwV^2jz?S0Tn}Bx(-)GSg%Vm! zpzZ0S-LPT;#%`Ir;nD<*KlWrmrHN?E0c*?KhOd=njh;vwOAWAqFS23VL~1J?T_elb zyoW5~>7BpJIBpVkSM69+PUpW2$ee^c?8t!IljscTnTZm5O{Tv3Coo)N7kk>9%ilm* z?-Wh=P-d@&{KZBnQm2NyMt#opi7`5zQtIGY=AJF7-B+r&>j0C9H_hx2AYp zH*27NU5n?amOrBP9avL43ExooY!nRPjUjiA+6@Z0{0@akOrndVPSHBBnn9hVI+zKb zL3>MQJLmwvo#-d^!i+kZ?vi%3*FkPF?MP22g4ImgURs8s$ncqTr262m0qjvafQnhv z*ZA@U>`~*LkBPRaiw;`PqAgUaU&ve6K*lT#K_;)szBCIzx>LK#b=)DitSxm2cou6; zzpsJHDO9W8uv&~4kFWw)%Vz92hfbAJJdxWuG{D6g@4s+qz(6a0DLSYOtrdO>z$4Gn zpEHSNfu9N%O&9gJ$w{CG^wK#gyj2PYrc6Y`U-%tLqy@!>Td!aB^2|DAU1j zU~r-+uCFM?*fp0rLB?E+8QNvTj=6L=eYiinS}HXp^uK*jYaTAUR%sA14_6$oxiEJg z_O@s_?4O7FtLd(TO7m$HU9}ft=Of~Sc`$Q6B7U0#r{-hyQFj^Grcr;B(sv4(qeHKvbDtv+0h(M!zyjF+Bz6{M_~>63us5_s;dr;^~2KG1vHx0+XELD zpk$-wmhv5Escb0CovniuHv?bVZZ-^CNd0K#*|2#b_S||2=oVtnA96*{v2xF^bD<@p zBc(l|IylVe587-O{IdudPfme?MacN-WUyO|WcnsUSDv~i!{Wu%#X?i6b#$|M2s7SZ z+rvo*R~Dn_w|0Qj5~N@=8^V_$g$6TV&Jxtol7+B$2^~ZqYzI5Qdiz-r3N%2~C<%rB z=Elb&IR|o$^ew7|=2Vl%WW@qmw$fg#v?FSw#RB&7VjEa2MJjGHq0v$rU=TVTspz{w za0Pwa3OV?rK72?wrNO$T*d=b;)yojMUNSUThAf3A!sun(m&}Ki%c!r^$w3DDZ1bewKc>Jso+LF>|tP0(WnWkwo2WGtNTj8Un_O6myJSE7Yo+X!weX?JNuH66UJ zq;C!DR-%&aH^O~Hp}nSo{wic+(qw453fZ_f2ZpUed7L-E%~e=GU@GW%ec~htSdDSp z!xR{_ny#Xs)`3w5*85C>x*0S;ikzr}5gE9gXU>M@8HjLlEi_t#2#N%VU4saA7!zi! z!H7L^7Mxv!J)Bzu4b~z;#mUfhEh0E!h`1axJk-9mmNqnT$MpmaIFA2%ght`K8|>Fn z50erROeDw3&~KR#vks%Eei^WA9TM9(5st1yV!2~=P_hp7o{X7B>yhe}88BfzQr*5w zPz{pXZ`=jB>yheI8R{uRC+vda^+@&9D)8HYRFxB;=LV!|AFqSe8<6VLF*>-75Lzz@ ztT)o;2CDivN)FW^d^@cQ(>KyUX`7c0PHv9lRVCZNVnn#=t*Yu*s=79el?OHJu86TdAXT*+d7i zTXEYnZw+K_#ht*(rO;>_wor_Q*lpOtZUkz38}+q)G8`GhC0Vay3m4JCJzzFddB9 zL2Fs;nDoco@zqXK;cB!4oBUV|(oSsBI1XHQ(g53zL(AAOv6R_pCbMyNA|&pl?`g^+ zh~I?`&JBn3UD(Hy!8*8u8R|I!Y%)>gHx+P=$wZNNq{D(t6#4N&u-%O<9EU;hZfwzH zkPZ@e;Ft^<3lH|7 zm;G*_1Me)vj8B7XWTKv4$-NOK0|*~`~hx#_y-S@ z!eUDgll-dcvV9KI&7|I?#e%6bUjzZ0rU{k0U3! z7<82!$9|JLVZY)PZ zpQQG5U0>LA52_#2yeVURF|a1%`KkNTi&-&z?IXq zc9oH4SdI6h*d`&PtWBjWV3vn5U;{H9_~%g%X-tp~hUC$DE*5_hABj&(3;7-qiI`V3NA5~zbU*KkVoJ40ioP3ZT|oS{+rk0zFF zkgQGQ4N~e^T1{;bD-@T3a?hJpF-s{{o6X6jf8brxpoWJ)7wl+ucm}K9Z+Hey}#_G z!znm-6*Vzgse=z!(M$~g?4=NI;tQw!Z6js?$cE!Lt6>*88Z3nEg}8^-A=>5LCpd@mA(5F78alz zpZOKE1$dO-^D7uX#8X?vR~YmVPiv2SflQu``vPAc(w4^VUyAWYfuHSb@bfDP-dag^ zW^e1^S`D4r#M2J#qF`_ItkFgcs7m z5(~rwgF>24t=~fQ3smH$H<0%NRnqPaRC|dksr?3;y~Hpl<277*iR_Mi4aGbSc@6Hb z@P^9hHS~LhY~OnY3tpibmcD`;uTcE(S5Wgcrn;99_ZknaF1>_|*LaID`X&6}<)$ye z?G4hgcnMwK&>;2s#zGj*^twi}yUBe+4@g<(i`htK4U6Am98u@|k|Nqc(&Ax8ry^R% zD6cOz(paA93-gMolhGErxV0}F;zf;IoZA;(6j2wW!E$j(U$A|LI}hI@(D5C$lis*1 zVEjAUSl`eUeR;3BiaOE_7ahbsR@BvB?}8w{*_K8jDB?X0FrCm)=yAM!5RvJl5I=bU z``^>mw8}H+^nuo(4NG9s2lUH(p2DFIs6)+Dc>Dp4vi?)>|4181!*D$u^^u0DJ9-PD zxyMUtAp4Ahk2KTj6`p|=j+I^9mn1Eb7eMDi*!&5}uYC*`KA|(8{21PU!lS)IxJcFf zOq*Mo^JXh$pY^NR4lN{p#%5<9!G_P+Y~3R`{~4P-#zpMsXWGW}nwJnMS2m5JdJ1@O zLg@%ozu*dTWpVb7FSIJ5^-AFUS2VsZ1z`CN&Dy;HLcZZe#<>Tuo|jiXfGfQ0{{ZTL z$FlkX#D1rFGjac`&4eo~0(Ki+!Ye(kC0;;=xj5)0M75 zu7UDUEpk!7>NX08#W$rIbo!2cKP4qmN4Rj5h-v70{A(%jqi1QV6oDRnA(d*=%o}io zN{)2S4R}JO`qC+MwlPatdg@+2smX19QI)xNK zqfbMCQd&pnUWG?W>5Teh4bf&PwqXwPJwv{MbWQ!pLBRR^S#Ga@-G{xcQks!*Y; zF|No}Nh2tJ%UVw@)l+@1Bo694`AfYZHua>H+Q3S5&n@|bN*=BqYRS0rS(Sk2@?f|0 zcP&1v6mV57c}a< zpz)@m3h*|On$eeuFv&!+rum7m#6${KU$HLdqQ8~QMX`zGM7vG~M^kBzT2HRuj2+Cc zBA#Qwzot@M+UFlom`Q`_uum`&qd#?C6+wq9vrT2$8CjYmosfyp*j$>W{!&@g=VJXt zOI*3lr5N=h9>nr1^i+j0!o&*N!9watkDr90H_!{DpM+}`(rk5q8Ih~%k-5xdqNQ|B zJ(dTmDWM$x-b{v%tSp^UrVHqa$U;HHh#O?{P!IxfLEqJUsqsg{(1nIX1PYxQQi zk~dsKWHsHhm5ilvh%i474H-ShkvwTCIRvY!N|ChsE-0!hB}&%2^r5dSolH%3!ux8{ zVw+feJB4qv#BWO%RVo+nMI{{EEV4qHKT8KDdr1Zv3A-Cgu5_dV?(W48D>2P`KIScbJt_7NA;`V~3FM)TAW#&z4b8hB2w(GVt8sEQW1I$zy5fj$&Al zOA4g(+lyh$F|tvrfthN@k-+C|#n~;7<5#(~w*tDJB<|{}Kk@T<{zW$i(LeP0?Q{0_ zlcXAvMsF_8zHkb^-IVHYEQU&F$YsgYQU~|XkS@|b3p`RfOPWiE))zz4S<*b3w!Q?P`<~x4UhZI`_$LwzBi7k;%uPKHJ7f77ceob-qs|#czF=_u^;Fm@R zPu@YRLh6*Aeu<;cT!pdMWkfe$Rh;dfPi(04IlUNKUL`Z7Vd=%$SFe(lMBVixK64VetaS0L+owhMxza3*>%!V{Z@u@>>)2? zY{MI*j-*^#41PCAO{oBiq2~?K$J9b#CdbMW&Mwr4ZH4-d@Z|;>FI`-MBmEzVl?G$x z`hO%^GQ*6=O>$aYK`XlDcHi~6K9F0aqk7wO0psTW`I$a{cL@o%$X0dIvtO(uT(Eu{ zAD#4)AoVt3Qf9I~jNXmk4@|*KuRFxswEa`wLjGA`{9V*1`r?)%`_vs0L?HSZNq2g6 zr5H~=@E}>iF9gE|MQB}kO7I2GczoU$XRm#MHx-u8Nee0C3X1xi%(D2LU)rV&MS&>a zpA#3A&m-QS_~~-*N08fGstlo8V%!2F2km;k;gLV*KV!}FsfsTTg+Tn?F_V8@%dZ!; zD|j8=yzb|Gq$=zMNxYX#O8Cm&`B}g&EwM4Fe;5N_@u3<2afihOjyd65g4bFSWq0@x zR>`mW@R#{C37Oh%_>4}AkNJ6&ycy~Y)_0)s%^`6(b&t>LL6JHxu0zV7!E9tQX`e5~fI7zGL z7DLbr;#GO@Tx86VOT`~Yz2e_N;9EX+3}49=wb8F4r8ZN*oC*3h;Lr=AHtY95s1l7p zb@;x>G7@VJnMFk3P`ep_&skev2R~krYSP5}`e6GK-wETX_q3O!iCQP)r(x5zScgAx zZD+6>PjI!3i=lTr{knA9F-+p;Sok9nK+F_Xtc3C6$7!hwwT!+L zv(f(v-)PVbe-c=G8TVc9iG!ipe}dd*i0P#7W?(b}`AJZKeT+c^+a`OkfSVz-0DR`k zU$5TXC|Jq(2AM+?7U1!LL{{E+K_-AKW_%Ycs?2WaL+8%=?cv!6Vl3^rt`A>7kfu`b z`(kMFk$jR`zQZ-;6Zs&uFDeH2&m>YR__r9=bk%p4uDrz|{!IEyzDx&IzL4>T4NjIa zxTc1F!zyiZktghh&$*0NvPL4$=tC_vPLHEgioxV7akLtKrIaW6Hn2$B;x&pK^&VP( zB{kK3uZmjkYsppNYu&08i9yOQ)$xCF`lrUPHtk)>w1;GN#24-TcaZy))K?YC z7-%Spgey?+oZ6Va6(n-`({zNkzoHNR{q<{9pPGOii>K=RO+rn4Dvw@8>-P?^@%1&k z6H*n%eIvH&t!D&Re4svE76WDb%+Bg_>%?RoyR6p1%d zG4%O?rWVF;JM+2gL3I9$qsUA{MBnyjx*MB2PV@+=mn6HK*Z~V};q}|5hwDLn& zg?gi7A@})nY%a9w%NoJv*E$EodNDx5upjj0FR-P}N!be3%~;qm{89bDD=J7-MHZNO zo-JKK_7(Gbj;$<%q&XKn8}@a_NhMcDtf;T~5#Z;*aJt}GE1uMMQ7kxFDlF09dTlXu54(I)I{ZTA_7x%Z0s;q=J6dah{KmZDNi~+2)HQv2OAQw&64W@L7oGs$`ocB09<~ zKg%|6c)SAHW_VtlpJkikGnONJ=F2wEF$p{{>-swAx&JSM&1+o9%8;rXN88zbqQMEZ>fw3T4T5dTCoORH%Tm+y-=Xb0PQWmaQnrmcz(Z zQ*vQMIZ{r4E+xO6X=oI{Ww?Xou$_0Xowe@%pLWg`(f`v`~c)5G51!G+*#x|T#MbvK@xon{&XWV zXw$axqt-gGjYywoIR;U77DoLh;l~GA=}jzQUu6f|8?rfr<*@p&ktLL=RGL`agum=8 zs_Qq3`217jBZlCoM)8x^MS{HZAnEAM&x1Th*@d46@ptKgO;l%{kaF@o$OB%AJP#6& z|5VR-W47fFh!XCi)Aax>ccyN>+53f;IbGY)Tq}gLJ8y3$zCBPVU0Z@aV!=nBiNa?d z`e5A)nK$o%f1GJ0l2#HPSD@~AzOQISTAGy9AnP|>wG!|0*dqUAMM>CRmWGjfCE#0G z+JQK&gH|py#Ins=IZY*8@8PH{*WCAr8l_+*)6sIxg_>ymI$YGJpykJAG+ir4YZC8u z;CPXCr^#J#X5f}fMC z7R6U%HOanHq)Voa0HNu}8d2Z{*DH^ApkTppXw}+A*vtXestxqv```8Ob9YcVE`xxnZ@Iad|3E8@Vzsd`i6eN`?&UFH8Kq9m=|)ve9=X z_`A`rWXV}r=|+3ulBG#w(L|A!v-i_&;O&ld-*N`#xYJPm%55TucVW$Kkm*im=r!rZ znS0|_7+!^jl6?TjtI&32U~91Rz*Lpwc)5mAJeI;>586b3dP{yrZMHzF2kHaex4ye4g7te8-c<2}g) z$!p>FnmFM8SPYi6P~+TiEi|b`Pg+z;!JMWONQ%-*K}8c1zj7R$YCr=^u1&^}fB6K5 z$Ax~#Twbh(O(yC~md%GpCam9x)!*d!38r7yQWNJK=ZG>yvSozQGJOU-ZbU1>kUG?Y^jZaD>tIo)@6f9qb;BKN zCe285nJ^=@zy0gfB-MuZFtnZzEoUex2L$h3XS~OoYpP;=Xesh$1+4XuxZy(s z42@+x&iq4H2muOAzO(@ylEcJXe2FXa`~CiMNb;rC$=2oY)EE1$@0Be7&22t z<&~N=Q&q~JI$Ac8{?fF%(@dD^j~f=xW=N@RP@t6BUUR0;H?8iC#vz6davbqt+y%!G z*Kvi^L*{i`BAIv8LReJ~nfJ$FthU?F%)2I%GjDI}$Rk*zSkpiRW-mKbyw%6kdAFw* z5I`~R-NmrKJ~GDK>F}mLGH#>AoN=q@0$@ZS@~!V6ETH#Kd}}}8XTJR{rXWMbw@ns7 z!yx3_!7(sC2>JH+ct{RHzCFZ0Cf6yxUDAMhkl&&t-+J&6J6r&N;#+KBsfILye4PqW z4QVTqvH)&0M82Ko3%L!EZ_}o8zI7+He4$w*+yZb|03#aFD~8%}szPyEy*SB5{ep3C zr-L7C4W=Q62pP^hYQcQjQO3q}tv-G}Pbb9M3$a{e>S*jTNn|CCGbnE977JcY=#-Mv zQTTc}U2;o?n$QnUgw!UqGZ{J$97AY-ugI}^>|Su)Lb&({kY?iB=85ci7vG-?Ng=pz zVjlyxq1daNdSmud^g}&;>=?6oe?REjly22`8z&O+>dzhvHqCJKcN+_S&FBREa>?90 zzYDV=wHa+-Jxeh#pV`d0(`Dv!d;T}`%H3dGDD~8j9Fw25rFZ}xsAst)Dj zMp*y4iHkFiN5Q^uTAOX2iZSXsR5T13mfxaD!_=^BMg3`CMEEIy*jBU*eLqwV$FUxA zIDVb<^Kk6YnpUJMo-(oU9v_;Y-(N!@sWnpQ_z<|?nnoK6$%e%vWh|mmnZPYIqT5jK z@Ep`@;71Y4i1VvXH5!<@F%uZktlAAz<5s)?&LNbAQ0)+r%FH+uZhje_c^NWz=W;`CL7wvtnwW928pj!x8@j9dnP zbfQ(QigS4?)>tADN_3`vWv1YPRis~G0ra*A6#d%IhXI{&6tv(WvW+*!OSU@LnGQ6Z z9xwcpurdwMpC9}V?m~CE78CiK^a#v7Ut-gb<~Kc{kPOo$g0U-&Fsxt4t76)KzpZ;#|SCJ&!1I4<lBfMEenl#u*%}+o&Fk=JGWB(zkQX;L?3#R^H;wzm8C!?|yiJ5>YThs%9Q)D=hUGGP zDiX51nlJnHrLk4#FU3T$rZ@!Vo|*r5>`s>9Q+RkL5|WQySLs)Y``ts0n&_?_{iwTs z_7G89K1>!2fy{n1u@M2ImEH9WZ~3*p3$zXIvu!u&w)eTR%p@Hw1A}Jl50z zfjJltzhGMouNDix*9gp0A3|n-oPl~?hM@zfxBl2bQS2OS&6$C)a{z5xHU(8T*wYy} z-Jm$DKb65_@YZnb@IWXLiQD>5zUL$?TIm4oBXM>;H!C-x)fxxb5Q)=ykwv^TW6?!$ zF%sD>EfP`eF#+_Q5Gb}=J6W(@yqeA%cZ6yKX)Vjhw&;!OHn@HpHv^*vqIl}V)5<}3 zdVm^)=>sWLpSqA2Wr{*z{&WvJc3a*cj13qm!$t|fr|1wH^E(*clXkW)A%pCAvi|o} z-#QMaJxhe27lq@buJ%oP+=QMZaFjg^ro|2R{qyUwAwtsp`Cz2^buN{~nr!#ez;_==>5Dn&y*I(!9n+LGzm-`TmmTXHMpONSg0IiC1u# zEhL9@&f}2roI_9;|EacVLj9aq+v6hDuN)#X`rjNf>~F;(xTz%?wr&D)$mMCGMOUUl z#stnGokWXT383$aAdf@vJN2g)H4Tw18r&$aMUy9TCgJH6lXT2ul8MM9^`dz(ruqoX zpKylxzf9sOV|Z~;z$7=gBphq{9f3LGd>)fbrd13jI*6k9hfL`Xaxoq!Y~e(ky6;d83>7p5Z1 z^ld9D#aln9t!%wx6t+GR_mqF)n2|z5o!9z-BGLbB{kH~rja2eSp+mCuo7?0Cw-Sh|*<)^K?4hd-z+tFaE#J_D*{f&(}NtekJPV zTdBI@LE%eEd2)W=FusnN9o z#3c(_%|i9CMHWn+Ph&{*SNJ{)!+U-O=h<{R`Qr<0jYIs{7dSl|^&`)BOLf`N-AugP zN_Mk^JKd|<$6#0dbm&@Y%jRNW)iw?!U^i@^gEFNtG{4UFp`y;o-{#PpI+FBB)-wK+ ztflQIS<8YXMzZdQ~^%)HbN_#zQ@`XQb+^4`s}~fP&fm zMzC`sstT9Cg%=BvRwLg+v3T0l?oL;XzYsM+JpSBM$S01CATl2H^OxVizIcqe^$pyK zr~Sx>E>Ld~;w#@l-$isHY0(8T7oo}NyatfH2y+g34Ye0zc=^}Rbun#PYIbMLxjuHb z^`RKN8vTdJ{Cp4`TTBn>?+4|#YkVL?CD5J4PnW{@Ww^j?ePYTTbA`kFyW0i2E}?a3 zr&77e%a%}lPx0XyVO}W0v{8idQ-pb{2=i1CruF|Kj4vEpNh9=C{PNqC;RDrH zAz_N!{6d&f`y^qCtwzFZx6Vy&yqe-M^(!|Zd<`vQ2=@^gph%*jlV3IHiRXa0PUEgC zhiH8$V`OqKmtTW|mca2fsQLW@a)ew227e@JrFBf0p_bsQIjn;$XH8TkcdHGzm9s^WC%&X^q8-|vBoD|q3t>}8xIeG6YHpJfV&KBEkoOg zMS99zb8)GlOmq0VSt8Azd*?PMbtw(SnZ&)Plb2Q4{mR1s1NS zwTfBg#WAnTkA}V&TOES$>RI)W&`a_R$hki zjnu;sSR=nj&?$PP?!RKIGp|QV${7EvN185x%NtSWkXk)I6Lj)Spxh=}mb{6B2Ai-0 z!VALDDZ&?Fc+n+Xrk@-9&3xb=2;GDqCYj#(8KF}|)NRIy{&^7_s))l2BBE179DxzZ zv-z-iGo4BbT}Upzh0fB^�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 ZU=oT3*YDY(*}N9shCQ3LFELMH{vSPh$&&y8 diff --git a/sds_wrapper.go b/sds_wrapper.go index 69204c4..7c1e523 100644 --- a/sds_wrapper.go +++ b/sds_wrapper.go @@ -8,12 +8,8 @@ package main #include // For C.free #include "bindings/bindings.h" // Update include path -// Forward declarations for Go callback functions exported to C -// These are the functions Nim will eventually call via the pointers we give it. -extern void goMessageReadyCallback(char* messageID); -extern void goMessageSentCallback(char* messageID); -extern void goMissingDependenciesCallback(char* messageID, char** missingDeps, size_t missingDepsCount); -extern void goPeriodicSyncCallback(); +// Forward declaration for the single Go callback relay function +extern void globalCallbackRelay(void* handle, CEventType eventType, void* data1, void* data2, size_t data3); // Helper function to call the C memory freeing functions static void callFreeCResultError(CResult res) { FreeCResultError(res); } @@ -45,7 +41,7 @@ type Callbacks struct { OnPeriodicSync func() } -// Global map to store callbacks associated with handles (necessary due to cgo limitations) +// Global map to store callbacks associated with handles var ( callbackRegistry = make(map[ReliabilityManagerHandle]*Callbacks) registryMutex sync.RWMutex @@ -148,7 +144,6 @@ func UnwrapReceivedMessage(handle ReliabilityManagerHandle, message []byte) ([]b } // Copy unwrapped message content - // Explicitly cast the message pointer to unsafe.Pointer unwrappedContent := C.GoBytes(unsafe.Pointer(cUnwrapResult.message), C.int(cUnwrapResult.message_len)) // Copy missing dependencies @@ -190,8 +185,8 @@ func MarkDependenciesMet(handle ReliabilityManagerHandle, messageIDs []MessageID cMessageIDsPtr = nil // Handle empty slice case } - // Pass the address of the pointer variable (&cMessageIDsPtr), which is of type ***C.char - cResult := C.MarkDependenciesMet(unsafe.Pointer(handle), &cMessageIDsPtr, C.size_t(len(messageIDs))) + // Pass the pointer variable (cMessageIDsPtr) directly, which is of type **C.char + cResult := C.MarkDependenciesMet(unsafe.Pointer(handle), cMessageIDsPtr, C.size_t(len(messageIDs))) if !cResult.is_ok { errMsg := C.GoString(cResult.error_message) @@ -201,29 +196,23 @@ func MarkDependenciesMet(handle ReliabilityManagerHandle, messageIDs []MessageID return nil } -// RegisterCallbacks sets the Go callback functions -func RegisterCallbacks(handle ReliabilityManagerHandle, callbacks Callbacks) error { +// RegisterCallback sets the single Go callback relay function +func RegisterCallback(handle ReliabilityManagerHandle, callbacks Callbacks) error { if handle == nil { return errors.New("handle is nil") } + // Store the Go callbacks associated with this handle registryMutex.Lock() callbackRegistry[handle] = &callbacks registryMutex.Unlock() - // Pass the C relay functions to Nim - // Nim will store these function pointers. When Nim calls them, they execute the C relay, - // Pass pointers to the exported Go functions directly. - // Nim expects function pointers matching the C callback typedefs. - // Cgo makes the exported Go functions available as C function pointers. - // Cast these function pointers to unsafe.Pointer to match the void* expected by the C function. - C.RegisterCallbacks( + // Register the single global Go relay function with the Nim library + // Nim will call globalCallbackRelay, passing the handle as the first argument. + C.RegisterCallback( unsafe.Pointer(handle), - unsafe.Pointer(C.goMessageReadyCallback), - unsafe.Pointer(C.goMessageSentCallback), - unsafe.Pointer(C.goMissingDependenciesCallback), - unsafe.Pointer(C.goPeriodicSyncCallback), - unsafe.Pointer(handle), // Pass handle as user_data + (C.CEventCallback)(C.globalCallbackRelay), // Pass the Go relay function pointer + nil, // user_data is not used here, handle is passed directly by Nim wrapper ) return nil } @@ -238,70 +227,54 @@ func StartPeriodicTasks(handle ReliabilityManagerHandle) error { return nil } -// --- Go Callback Implementations (Exported to C) --- - -func goMessageReadyCallback(messageID *C.char) { - msgIdStr := C.GoString(messageID) - registryMutex.RLock() - defer registryMutex.RUnlock() - - // Find the correct Go callback based on handle (this is tricky without handle passed) - // For now, iterate through all registered callbacks. This is NOT ideal for multiple managers. - // A better approach would involve passing the handle back through user_data if possible, - // or maintaining a single global callback handler if only one manager instance is expected. - // Let's assume a single instance for simplicity for now. - for _, callbacks := range callbackRegistry { - if callbacks != nil && callbacks.OnMessageReady != nil { - // Run in a goroutine to avoid blocking the C thread - go callbacks.OnMessageReady(MessageID(msgIdStr)) - } - } - fmt.Printf("Go: Message Ready: %s\n", msgIdStr) // Debug print -} - -func goMessageSentCallback(messageID *C.char) { - msgIdStr := C.GoString(messageID) - registryMutex.RLock() - defer registryMutex.RUnlock() - - for _, callbacks := range callbackRegistry { - if callbacks != nil && callbacks.OnMessageSent != nil { - go callbacks.OnMessageSent(MessageID(msgIdStr)) - } - } - fmt.Printf("Go: Message Sent: %s\n", msgIdStr) // Debug print -} - -func goMissingDependenciesCallback(messageID *C.char, missingDeps **C.char, missingDepsCount C.size_t) { - msgIdStr := C.GoString(messageID) - deps := make([]MessageID, missingDepsCount) - if missingDepsCount > 0 { - // Convert C array of C strings to Go slice - cDepsArray := (*[1 << 30]*C.char)(unsafe.Pointer(missingDeps))[:missingDepsCount:missingDepsCount] - for i, s := range cDepsArray { - deps[i] = MessageID(C.GoString(s)) - } - } +// globalCallbackRelay is called by Nim for all events. +// It uses the handle to find the correct Go Callbacks struct and dispatch the call. +//export globalCallbackRelay +func globalCallbackRelay(handle unsafe.Pointer, eventType C.CEventType, data1 unsafe.Pointer, data2 unsafe.Pointer, data3 C.size_t) { + goHandle := ReliabilityManagerHandle(handle) registryMutex.RLock() - defer registryMutex.RUnlock() + callbacks, ok := callbackRegistry[goHandle] + registryMutex.RUnlock() - for _, callbacks := range callbackRegistry { - if callbacks != nil && callbacks.OnMissingDependencies != nil { - go callbacks.OnMissingDependencies(MessageID(msgIdStr), deps) - } + if !ok || callbacks == nil { + fmt.Printf("Go: globalCallbackRelay: No callbacks registered for handle %v\n", goHandle) // Uncommented + return } - fmt.Printf("Go: Missing Deps for %s: %v\n", msgIdStr, deps) // Debug print -} -func goPeriodicSyncCallback() { - registryMutex.RLock() - defer registryMutex.RUnlock() - - for _, callbacks := range callbackRegistry { - if callbacks != nil && callbacks.OnPeriodicSync != nil { - go callbacks.OnPeriodicSync() + // Use a goroutine to avoid blocking the Nim thread + go func() { + switch eventType { + case C.EVENT_MESSAGE_READY: + if callbacks.OnMessageReady != nil { + msgIdStr := C.GoString((*C.char)(data1)) + callbacks.OnMessageReady(MessageID(msgIdStr)) + } + case C.EVENT_MESSAGE_SENT: + if callbacks.OnMessageSent != nil { + msgIdStr := C.GoString((*C.char)(data1)) + callbacks.OnMessageSent(MessageID(msgIdStr)) + } + case C.EVENT_MISSING_DEPENDENCIES: + if callbacks.OnMissingDependencies != nil { + msgIdStr := C.GoString((*C.char)(data1)) + depsCount := int(data3) + deps := make([]MessageID, depsCount) + if depsCount > 0 { + // Convert C array of C strings (**char) to Go slice + cDepsArray := (*[1 << 30]*C.char)(data2)[:depsCount:depsCount] + for i, s := range cDepsArray { + deps[i] = MessageID(C.GoString(s)) + } + } + callbacks.OnMissingDependencies(MessageID(msgIdStr), deps) + } + case C.EVENT_PERIODIC_SYNC: + if callbacks.OnPeriodicSync != nil { + callbacks.OnPeriodicSync() + } + default: + fmt.Printf("Go: globalCallbackRelay: Received unknown event type %d for handle %v\n", eventType, goHandle) } - } - fmt.Println("Go: Periodic Sync Requested") // Debug print + }() } diff --git a/sds_wrapper_test.go b/sds_wrapper_test.go index 4ef5edf..ee1185a 100644 --- a/sds_wrapper_test.go +++ b/sds_wrapper_test.go @@ -1,9 +1,9 @@ package main import ( - // "fmt" - // "sync" + "fmt" + "sync" "testing" - // "time" + "time" ) // Test basic creation, cleanup, and reset @@ -58,205 +58,202 @@ func TestWrapUnwrap(t *testing.T) { } } -// // Test dependency handling -// func TestDependencies(t *testing.T) { -// channelID := "test-deps" -// handle, err := NewReliabilityManager(channelID) -// if err != nil { -// t.Fatalf("NewReliabilityManager failed: %v", err) -// } -// defer CleanupReliabilityManager(handle) +// Test dependency handling +func TestDependencies(t *testing.T) { + channelID := "test-deps" + handle, err := NewReliabilityManager(channelID) + if err != nil { + t.Fatalf("NewReliabilityManager failed: %v", err) + } + defer CleanupReliabilityManager(handle) -// // 1. Send message 1 (will become a dependency) -// payload1 := []byte("message one") -// msgID1 := MessageID("msg-dep-1") -// wrappedMsg1, err := WrapOutgoingMessage(handle, payload1, msgID1) -// if err != nil { -// t.Fatalf("WrapOutgoingMessage (1) failed: %v", err) -// } -// // Simulate receiving msg1 to add it to history (implicitly acknowledges it) -// _, _, err = UnwrapReceivedMessage(handle, wrappedMsg1) -// if err != nil { -// t.Fatalf("UnwrapReceivedMessage (1) failed: %v", err) -// } + // 1. Send message 1 (will become a dependency) + payload1 := []byte("message one") + msgID1 := MessageID("msg-dep-1") + wrappedMsg1, err := WrapOutgoingMessage(handle, payload1, msgID1) + if err != nil { + t.Fatalf("WrapOutgoingMessage (1) failed: %v", err) + } + // Simulate receiving msg1 to add it to history (implicitly acknowledges it) + _, _, err = UnwrapReceivedMessage(handle, wrappedMsg1) + if err != nil { + t.Fatalf("UnwrapReceivedMessage (1) failed: %v", err) + } -// // 2. Send message 2 (depends on message 1 implicitly via causal history) -// payload2 := []byte("message two") -// msgID2 := MessageID("msg-dep-2") -// wrappedMsg2, err := WrapOutgoingMessage(handle, payload2, msgID2) -// if err != nil { -// t.Fatalf("WrapOutgoingMessage (2) failed: %v", err) -// } + // 2. Send message 2 (depends on message 1 implicitly via causal history) + payload2 := []byte("message two") + msgID2 := MessageID("msg-dep-2") + wrappedMsg2, err := WrapOutgoingMessage(handle, payload2, msgID2) + if err != nil { + t.Fatalf("WrapOutgoingMessage (2) failed: %v", err) + } -// // 3. Create a new manager to simulate a different peer receiving msg2 without msg1 -// handle2, err := NewReliabilityManager(channelID) // Same channel ID -// if err != nil { -// t.Fatalf("NewReliabilityManager (2) failed: %v", err) -// } -// defer CleanupReliabilityManager(handle2) + // 3. Create a new manager to simulate a different peer receiving msg2 without msg1 + handle2, err := NewReliabilityManager(channelID) // Same channel ID + if err != nil { + t.Fatalf("NewReliabilityManager (2) failed: %v", err) + } + defer CleanupReliabilityManager(handle2) -// // 4. Unwrap message 2 on the second manager - should report msg1 as missing -// _, missingDeps, err := UnwrapReceivedMessage(handle2, wrappedMsg2) -// if err != nil { -// t.Fatalf("UnwrapReceivedMessage (2) on handle2 failed: %v", err) -// } + // 4. Unwrap message 2 on the second manager - should report msg1 as missing + _, missingDeps, err := UnwrapReceivedMessage(handle2, wrappedMsg2) + if err != nil { + t.Fatalf("UnwrapReceivedMessage (2) on handle2 failed: %v", err) + } -// if len(missingDeps) == 0 { -// t.Fatalf("Expected missing dependencies, got none") -// } -// foundDep1 := false -// for _, dep := range missingDeps { -// if dep == msgID1 { -// foundDep1 = true -// break -// } -// } -// if !foundDep1 { -// t.Errorf("Expected missing dependency %q, got %v", msgID1, missingDeps) -// } + if len(missingDeps) == 0 { + t.Fatalf("Expected missing dependencies, got none") + } + foundDep1 := false + for _, dep := range missingDeps { + if dep == msgID1 { + foundDep1 = true + break + } + } + if !foundDep1 { + t.Errorf("Expected missing dependency %q, got %v", msgID1, missingDeps) + } -// // 5. Mark the dependency as met -// err = MarkDependenciesMet(handle2, []MessageID{msgID1}) -// if err != nil { -// t.Fatalf("MarkDependenciesMet failed: %v", err) -// } + // 5. Mark the dependency as met + err = MarkDependenciesMet(handle2, []MessageID{msgID1}) + if err != nil { + t.Fatalf("MarkDependenciesMet failed: %v", err) + } +} -// // Ideally, we'd check if the message is now moved from an internal buffer, -// // but the current API doesn't expose buffer state. We rely on callbacks for this. -// } +// Test callbacks +func TestCallbacks(t *testing.T) { + channelID := "test-callbacks" + handle, err := NewReliabilityManager(channelID) + if err != nil { + t.Fatalf("NewReliabilityManager failed: %v", err) + } + defer CleanupReliabilityManager(handle) -// // Test callbacks -// func TestCallbacks(t *testing.T) { -// channelID := "test-callbacks" -// handle, err := NewReliabilityManager(channelID) -// if err != nil { -// t.Fatalf("NewReliabilityManager failed: %v", err) -// } -// defer CleanupReliabilityManager(handle) + var wg sync.WaitGroup + receivedReady := make(map[MessageID]bool) + receivedSent := make(map[MessageID]bool) + receivedMissing := make(map[MessageID][]MessageID) + syncRequested := false + var cbMutex sync.Mutex // Protect access to callback tracking maps/vars -// var wg sync.WaitGroup -// receivedReady := make(map[MessageID]bool) -// receivedSent := make(map[MessageID]bool) -// receivedMissing := make(map[MessageID][]MessageID) -// syncRequested := false -// var cbMutex sync.Mutex // Protect access to callback tracking maps/vars + callbacks := Callbacks{ + OnMessageReady: func(messageId MessageID) { + fmt.Printf("Test: OnMessageReady received: %s\n", messageId) + cbMutex.Lock() + receivedReady[messageId] = true + cbMutex.Unlock() + wg.Done() + }, + OnMessageSent: func(messageId MessageID) { + fmt.Printf("Test: OnMessageSent received: %s\n", messageId) + cbMutex.Lock() + receivedSent[messageId] = true + cbMutex.Unlock() + wg.Done() + }, + OnMissingDependencies: func(messageId MessageID, missingDeps []MessageID) { + fmt.Printf("Test: OnMissingDependencies received for %s: %v\n", messageId, missingDeps) + cbMutex.Lock() + receivedMissing[messageId] = missingDeps + cbMutex.Unlock() + wg.Done() + }, + OnPeriodicSync: func() { + fmt.Println("Test: OnPeriodicSync received") + cbMutex.Lock() + syncRequested = true + cbMutex.Unlock() + // Don't wg.Done() here, it might be called multiple times + }, + } -// callbacks := Callbacks{ -// OnMessageReady: func(messageId MessageID) { -// fmt.Printf("Test: OnMessageReady received: %s\n", messageId) -// cbMutex.Lock() -// receivedReady[messageId] = true -// cbMutex.Unlock() -// wg.Done() -// }, -// OnMessageSent: func(messageId MessageID) { -// fmt.Printf("Test: OnMessageSent received: %s\n", messageId) -// cbMutex.Lock() -// receivedSent[messageId] = true -// cbMutex.Unlock() -// wg.Done() -// }, -// OnMissingDependencies: func(messageId MessageID, missingDeps []MessageID) { -// fmt.Printf("Test: OnMissingDependencies received for %s: %v\n", messageId, missingDeps) -// cbMutex.Lock() -// receivedMissing[messageId] = missingDeps -// cbMutex.Unlock() -// wg.Done() -// }, -// OnPeriodicSync: func() { -// fmt.Println("Test: OnPeriodicSync received") -// cbMutex.Lock() -// syncRequested = true -// cbMutex.Unlock() -// // Don't wg.Done() here, it might be called multiple times -// }, -// } + err = RegisterCallback(handle, callbacks) + if err != nil { + t.Fatalf("RegisterCallback failed: %v", err) + } -// err = RegisterCallbacks(handle, callbacks) -// if err != nil { -// t.Fatalf("RegisterCallbacks failed: %v", err) -// } + // Start tasks AFTER registering callbacks + err = StartPeriodicTasks(handle) + if err != nil { + t.Fatalf("StartPeriodicTasks failed: %v", err) + } -// // Start tasks AFTER registering callbacks -// err = StartPeriodicTasks(handle) -// if err != nil { -// t.Fatalf("StartPeriodicTasks failed: %v", err) -// } + // --- Test Scenario --- -// // --- Test Scenario --- + // 1. Send msg1 + wg.Add(1) // Expect OnMessageSent for msg1 eventually + payload1 := []byte("callback test 1") + msgID1 := MessageID("cb-msg-1") + wrappedMsg1, err := WrapOutgoingMessage(handle, payload1, msgID1) + if err != nil { + t.Fatalf("WrapOutgoingMessage (1) failed: %v", err) + } -// // 1. Send msg1 -// wg.Add(1) // Expect OnMessageSent for msg1 eventually -// payload1 := []byte("callback test 1") -// msgID1 := MessageID("cb-msg-1") -// wrappedMsg1, err := WrapOutgoingMessage(handle, payload1, msgID1) -// if err != nil { -// t.Fatalf("WrapOutgoingMessage (1) failed: %v", err) -// } + // 2. Receive msg1 (triggers OnMessageReady for msg1, OnMessageSent for msg1 via causal history) + wg.Add(1) // Expect OnMessageReady for msg1 + _, _, err = UnwrapReceivedMessage(handle, wrappedMsg1) + if err != nil { + t.Fatalf("UnwrapReceivedMessage (1) failed: %v", err) + } -// // 2. Receive msg1 (triggers OnMessageReady for msg1, OnMessageSent for msg1 via causal history) -// wg.Add(1) // Expect OnMessageReady for msg1 -// _, _, err = UnwrapReceivedMessage(handle, wrappedMsg1) -// if err != nil { -// t.Fatalf("UnwrapReceivedMessage (1) failed: %v", err) -// } + // 3. Send msg2 (depends on msg1) + wg.Add(1) // Expect OnMessageSent for msg2 eventually + payload2 := []byte("callback test 2") + msgID2 := MessageID("cb-msg-2") + wrappedMsg2, err := WrapOutgoingMessage(handle, payload2, msgID2) + if err != nil { + t.Fatalf("WrapOutgoingMessage (2) failed: %v", err) + } -// // 3. Send msg2 (depends on msg1) -// wg.Add(1) // Expect OnMessageSent for msg2 eventually -// payload2 := []byte("callback test 2") -// msgID2 := MessageID("cb-msg-2") -// wrappedMsg2, err := WrapOutgoingMessage(handle, payload2, msgID2) -// if err != nil { -// t.Fatalf("WrapOutgoingMessage (2) failed: %v", err) -// } + // 4. Receive msg2 (triggers OnMessageReady for msg2, OnMessageSent for msg2) + wg.Add(1) // Expect OnMessageReady for msg2 + _, _, err = UnwrapReceivedMessage(handle, wrappedMsg2) + if err != nil { + t.Fatalf("UnwrapReceivedMessage (2) failed: %v", err) + } -// // 4. Receive msg2 (triggers OnMessageReady for msg2, OnMessageSent for msg2) -// wg.Add(1) // Expect OnMessageReady for msg2 -// _, _, err = UnwrapReceivedMessage(handle, wrappedMsg2) -// if err != nil { -// t.Fatalf("UnwrapReceivedMessage (2) failed: %v", err) -// } + // --- Verification --- + // Wait for expected callbacks with a timeout + waitTimeout(&wg, 5*time.Second, t) -// // --- Verification --- -// // Wait for expected callbacks with a timeout -// waitTimeout(&wg, 5*time.Second, t) + cbMutex.Lock() + defer cbMutex.Unlock() -// cbMutex.Lock() -// defer cbMutex.Unlock() + if !receivedReady[msgID1] { + t.Errorf("OnMessageReady not called for %s", msgID1) + } + if !receivedReady[msgID2] { + t.Errorf("OnMessageReady not called for %s", msgID2) + } + if !receivedSent[msgID1] { + t.Errorf("OnMessageSent not called for %s", msgID1) + } + if !receivedSent[msgID2] { + t.Errorf("OnMessageSent not called for %s", msgID2) + } + // We didn't explicitly test missing deps in this path + if len(receivedMissing) > 0 { + t.Errorf("Unexpected OnMissingDependencies calls: %v", receivedMissing) + } + // Periodic sync is harder to guarantee in a short test, just check if it was ever true + if !syncRequested { + t.Logf("Warning: OnPeriodicSync might not have been called within the test timeout") + } +} -// if !receivedReady[msgID1] { -// t.Errorf("OnMessageReady not called for %s", msgID1) -// } -// if !receivedReady[msgID2] { -// t.Errorf("OnMessageReady not called for %s", msgID2) -// } -// if !receivedSent[msgID1] { -// t.Errorf("OnMessageSent not called for %s", msgID1) -// } -// if !receivedSent[msgID2] { -// t.Errorf("OnMessageSent not called for %s", msgID2) -// } -// // We didn't explicitly test missing deps in this path -// if len(receivedMissing) > 0 { -// t.Errorf("Unexpected OnMissingDependencies calls: %v", receivedMissing) -// } -// // Periodic sync is harder to guarantee in a short test, just check if it was ever true -// if !syncRequested { -// t.Logf("Warning: OnPeriodicSync might not have been called within the test timeout") -// } -// } - -// // Helper function to wait for WaitGroup with a timeout -// func waitTimeout(wg *sync.WaitGroup, timeout time.Duration, t *testing.T) { -// c := make(chan struct{}) -// go func() { -// defer close(c) -// wg.Wait() -// }() -// select { -// case <-c: -// // Completed normally -// case <-time.After(timeout): -// t.Fatalf("Timed out waiting for callbacks") -// } -// } +// Helper function to wait for WaitGroup with a timeout +func waitTimeout(wg *sync.WaitGroup, timeout time.Duration, t *testing.T) { + c := make(chan struct{}) + go func() { + defer close(c) + wg.Wait() + }() + select { + case <-c: + // Completed normally + case <-time.After(timeout): + t.Fatalf("Timed out waiting for callbacks") + } +} diff --git a/src/reliability_utils.nim b/src/reliability_utils.nim index 02daf3b..33b47e6 100644 --- a/src/reliability_utils.nim +++ b/src/reliability_utils.nim @@ -24,18 +24,10 @@ type channelId*: string config*: ReliabilityConfig lock*: Lock - # Nim callbacks (used internally or if not using C bindings) - onMessageReady*: proc(messageId: MessageID) {.gcsafe.} - onMessageSent*: proc(messageId: MessageID) {.gcsafe.} - onMissingDependencies*: proc(messageId: MessageID, missingDeps: seq[MessageID]) {.gcsafe.} - onPeriodicSync*: PeriodicSyncCallback - - # C callback pointers and user data (for FFI) - cMessageReadyCallback*: pointer - cMessageSentCallback*: pointer - cMissingDependenciesCallback*: pointer - cPeriodicSyncCallback*: pointer - cUserData*: pointer + onMessageReady*: proc(messageId: MessageID) + onMessageSent*: proc(messageId: MessageID) + onMissingDependencies*: proc(messageId: MessageID, missingDeps: seq[MessageID]) + onPeriodicSync*: proc() ReliabilityError* = enum reInvalidArgument