mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-04-28 10:33:20 +00:00
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
from pysearpc import searpc_server
|
||
|
|
||
|
from ccnet.status_code import SC_OK, SS_OK
|
||
|
from ccnet.status_code import SC_SERVER_RET, SS_SERVER_RET, SC_SERVER_MORE, SS_SERVER_MORE, \
|
||
|
SC_CLIENT_CALL, SC_CLIENT_MORE, SC_CLIENT_CALL_MORE
|
||
|
|
||
|
from .processor import Processor
|
||
|
|
||
|
class RpcServerProc(Processor):
|
||
|
name = 'rpcserver-proc'
|
||
|
max_transfer_length = 65535 - 128
|
||
|
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
Processor.__init__(self, *args, **kwargs)
|
||
|
self.fretstr = ''
|
||
|
self.fcallstr = ''
|
||
|
|
||
|
def start(self, *argv):
|
||
|
self.send_response(SC_OK, SS_OK, '')
|
||
|
|
||
|
def send_fret(self):
|
||
|
maxlen = self.max_transfer_length
|
||
|
l = len(self.fretstr)
|
||
|
if l < maxlen:
|
||
|
self.send_response(SC_SERVER_RET, SS_SERVER_RET, self.fretstr)
|
||
|
self.fretstr = ''
|
||
|
|
||
|
else:
|
||
|
buf = self.fretstr[:maxlen]
|
||
|
self.send_response(SC_SERVER_MORE, SS_SERVER_MORE, buf)
|
||
|
self.fretstr = self.fretstr[maxlen:]
|
||
|
|
||
|
def handle_update(self, code, code_msg, content):
|
||
|
if code == SC_CLIENT_CALL_MORE:
|
||
|
self.fcallstr += content
|
||
|
return
|
||
|
elif code == SC_CLIENT_CALL:
|
||
|
self.fcallstr += content
|
||
|
self.fretstr = searpc_server.call_function(self.name, self.fcallstr)
|
||
|
self.fcallstr = ''
|
||
|
self.send_fret()
|
||
|
elif code == SC_CLIENT_MORE:
|
||
|
self.send_fret()
|