mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-04-27 18:25:06 +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() |