@@ -316,44 +316,27 @@ cdef object times = [0.0] * 3 # track time in [charm reduction callbacks, custom
316
316
cdef bytes localMsg = b' L:' + (b' ' * sizeof(int ))
317
317
cdef char * localMsg_ptr = < char * > localMsg
318
318
319
- # cdef const int CmiReservedHeaderSize = getCmiReservedHeaderSize()
319
+ # cdef const int CmiReservedHeaderSize s = getCmiReservedHeaderSize()
320
320
321
321
cdef struct remoteMsg:
322
- char [CmiReservedHeaderSize] reservedHeader
323
- # char[32] reservedHeader
324
- CcsImplHeader header
325
- void * data
326
-
327
- cdef void recvRemoteMessage(void * msg):
328
-
329
- cdef void * shiftedMsg = msg + CmiReservedHeaderSize
330
- cdef remoteMsg * incomingMsgPtr = < remoteMsg* > shiftedMsg
331
- cdef remoteMsg incomingMsg = dereference(incomingMsgPtr)
332
- cdef char * handler_name = incomingMsg.header.handler
333
-
334
- cdef object handler
335
- cdef bytes payload
336
- # call correct handler
337
-
338
- cdef int payload_length = (< unsigned char * > incomingMsg.header.len.data)[0 ] | \
339
- (< unsigned char * > incomingMsg.header.len.data)[1 ] << 8 | \
340
- (< unsigned char * > incomingMsg.header.len.data)[2 ] << 16 | \
341
- (< unsigned char * > incomingMsg.header.len.data)[3 ] << 24
342
- if payload_length <= 0 :
343
- print (" Error: Payload Length is <= 0" )
344
- return
345
-
346
- payload = bytes(< char * > incomingMsg.data, payload_length)
322
+ int a
323
+ int b
324
+ char handler_name[32 ] # we know it can't be longer
325
+ char data[1024 ] # assume generous length at end
326
+
327
+ cdef void recvRemoteMessage(void * msg) noexcept:
347
328
329
+ cdef void * shiftedMsg = msg + CmiReservedHeaderSize # move past reserved header
330
+ cdef remoteMsg* incomingMsgPtr = < remoteMsg* > shiftedMsg
331
+ cdef int handler_length = incomingMsgPtr.a
332
+ cdef int data_length = incomingMsgPtr.b
348
333
349
- python_handlername = handler_name.decode(' utf-8' )
350
- handler_func = _ccs_handlers.get(python_handlername)
351
- if handler_func is None :
352
- print (f" Error: Could not find handler assocaited with name : {python_handlername}" )
353
- return
334
+ # turn char arrays into strings
335
+
336
+ handler_name = incomingMsgPtr.handler_name[:handler_length].decode(' utf-8' )
337
+ data = incomingMsgPtr.data[:data_length].decode(' utf-8' )
354
338
355
- handler_func(payload)
356
- return
339
+ charm.callHandler(handler_name, data)
357
340
358
341
359
342
class CharmLib (object ):
@@ -872,14 +855,12 @@ class CharmLib(object):
872
855
def CcsRegisterHandler (self , str handlername , object handler ):
873
856
cdef bytes handler_bytes = handlername.encode(" utf-8" )
874
857
cdef const char * c_handlername = handler_bytes
875
-
876
- _ccs_handlers[handlername] = handler
877
858
CcsRegisterHandlerExt(c_handlername, < void * > recvRemoteMessage)
878
859
879
860
def isRemoteRequest (self ):
880
861
return bool (CcsIsRemoteRequest())
881
862
882
- def CcsSendReply (str message ):
863
+ def CcsSendReply (self , str message ):
883
864
cdef bytes message_bytes = message.encode(" utf-8" )
884
865
cdef const char * replyData = message_bytes
885
866
0 commit comments