add robot
This commit is contained in:
parent
274cb8f14e
commit
7c784fc0eb
0
server/tools/robot/virtualclient/__init__.py
Normal file
0
server/tools/robot/virtualclient/__init__.py
Normal file
2
server/tools/robot/virtualclient/bat/robot1.bat
Normal file
2
server/tools/robot/virtualclient/bat/robot1.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
cd ..
|
||||||
|
start python robot.py ws://118.31.73.76:82 test0001 123456
|
2
server/tools/robot/virtualclient/bat/robot2.bat
Normal file
2
server/tools/robot/virtualclient/bat/robot2.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
cd ..
|
||||||
|
start python robot.py ws://192.144.140.87:8999 test0002 123456
|
110
server/tools/robot/virtualclient/client.py
Normal file
110
server/tools/robot/virtualclient/client.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
import websocket
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
import vs_proto_pb2
|
||||||
|
import vs_msgid_pb2
|
||||||
|
|
||||||
|
try:
|
||||||
|
import thread
|
||||||
|
except ImportError:
|
||||||
|
import _thread as thread
|
||||||
|
import time
|
||||||
|
|
||||||
|
def on_open (ws):
|
||||||
|
print 'on open'
|
||||||
|
|
||||||
|
class Client:
|
||||||
|
|
||||||
|
def __init__(self, accountid, user_profile, remote_ip, remote_port):
|
||||||
|
self._recv_buf = bytearray()
|
||||||
|
self._accountid = accountid
|
||||||
|
self._sessionid = ''
|
||||||
|
self._user_profile = user_profile
|
||||||
|
self._ws = websocket.WebSocketApp ("ws://127.0.0.1:" + sys.argv[1],
|
||||||
|
on_message = self.onMessage,
|
||||||
|
on_error = self.onError,
|
||||||
|
on_close = self.onClose)
|
||||||
|
# self._ws.on_open = on_open
|
||||||
|
self._ws.on_open = self.onOpen
|
||||||
|
|
||||||
|
def sendMsg(self, msgid, msg):
|
||||||
|
PACK_SIGN = 0xAABBCCAA
|
||||||
|
enmsg = bytearray(msg.SerializeToString())
|
||||||
|
pktlen_str = chr(len(enmsg) & 0xFF) + chr(len(enmsg) >> 8 & 0xFF)
|
||||||
|
msgid_str = chr(msgid & 0xFF) + chr(msgid >> 8 & 0xFF)
|
||||||
|
sign_str = chr(PACK_SIGN & 0xFF) + chr(PACK_SIGN >> 8 & 0xFF) + \
|
||||||
|
chr(PACK_SIGN >> 16 & 0xFF) + chr(PACK_SIGN >> 24 & 0xFF)
|
||||||
|
buff = pktlen_str + msgid_str + sign_str + enmsg
|
||||||
|
self._ws.send (buff, 2)
|
||||||
|
|
||||||
|
def parsePacket(self):
|
||||||
|
while len(self._recv_buf) >= 8:
|
||||||
|
pktlen = self._recv_buf[0] + (self._recv_buf[1] << 8)
|
||||||
|
msgid = self._recv_buf[2] + (self._recv_buf[3] << 8)
|
||||||
|
magiccode = self._recv_buf[4] + \
|
||||||
|
(self._recv_buf[5] << 8) + \
|
||||||
|
(self._recv_buf[6] << 16) + \
|
||||||
|
(self._recv_buf[7] << 24)
|
||||||
|
print 'pkglen:', pktlen, ' msgid:', msgid, ' magiccode:', magiccode
|
||||||
|
if len(self._recv_buf) >= 8 + pktlen:
|
||||||
|
msgbody = self._recv_buf[8 : 8 + pktlen]
|
||||||
|
self.onUserPacket(msgid, msgbody)
|
||||||
|
self._recv_buf = self._recv_buf[8 + pktlen:]
|
||||||
|
|
||||||
|
def onUserPacket(self):
|
||||||
|
try:
|
||||||
|
msgid_class_hash = {
|
||||||
|
vs_msgid_pb2._SMLogin: vs_proto_pb2.SMLogin,
|
||||||
|
vs_msgid_pb2._SMCreateRoom: vs_proto_pb2.SMCreateRoom
|
||||||
|
}
|
||||||
|
if not msgid_class_hash.has_key(msgid):
|
||||||
|
print 'not found msgclass:', msgid
|
||||||
|
return
|
||||||
|
msg = msgid_class_hash[msgid]()
|
||||||
|
ret = msg.ParseFromString(str(msgbody))
|
||||||
|
print str(msg)
|
||||||
|
except Exception, e:
|
||||||
|
print 'on_user_packet', e
|
||||||
|
|
||||||
|
def onMessage(self, message):
|
||||||
|
data = bytearray(message)
|
||||||
|
self._recv_buf += data
|
||||||
|
print 'on_message ', len(recv_buf)
|
||||||
|
self._ws.parsePacket();
|
||||||
|
|
||||||
|
def onError(self, error):
|
||||||
|
print error
|
||||||
|
|
||||||
|
def onClose(self):
|
||||||
|
print 'onclose'
|
||||||
|
|
||||||
|
def onOpen(self):
|
||||||
|
print 'ok'
|
||||||
|
def run (*args):
|
||||||
|
msg = vs_proto_pb2.CMLogin()
|
||||||
|
msg.account_id = '1234567'
|
||||||
|
msg.session_id = 'dsjfkasjkfljfsklfd'
|
||||||
|
print msg
|
||||||
|
sendmsg(ws, vs_msgid_pb2._CMLogin, msg)
|
||||||
|
testCMCreateRoom(ws)
|
||||||
|
while True:
|
||||||
|
testSendRoomEvent(ws)
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
time.sleep(500)
|
||||||
|
ws.close ()
|
||||||
|
print ("thread terminating...")
|
||||||
|
thread.start_new_thread (run, ())
|
||||||
|
|
||||||
|
def runForever(self):
|
||||||
|
self._ws.run_forever()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
client = Client(
|
||||||
|
'123456',
|
||||||
|
'',
|
||||||
|
'127.0.0.1',
|
||||||
|
82
|
||||||
|
)
|
||||||
|
client.runForever()
|
32
server/tools/robot/virtualclient/new_robot.py
Normal file
32
server/tools/robot/virtualclient/new_robot.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from optparse import OptionParser
|
||||||
|
|
||||||
|
from tornado import gen
|
||||||
|
from tornado import httpclient
|
||||||
|
from tornado import httputil
|
||||||
|
from tornado import ioloop
|
||||||
|
from tornado import websocket
|
||||||
|
|
||||||
|
import virtualclient
|
||||||
|
|
||||||
|
@gen.coroutine
|
||||||
|
def createVirtualClient(account, ws_url):
|
||||||
|
virtualclient.VirtualClient(ws_url, account).run()
|
||||||
|
|
||||||
|
@gen.coroutine
|
||||||
|
def main():
|
||||||
|
parser = OptionParser(usage="%prog [options]")
|
||||||
|
parser.add_option("-a",
|
||||||
|
"--accounts",
|
||||||
|
dest = "accounts",
|
||||||
|
help = "account info")
|
||||||
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
|
ws_url = args if args else 'ws://127.0.0.1:83/websocket'
|
||||||
|
for account in options.accounts.split(','):
|
||||||
|
ioloop.IOLoop.current().spawn_callback(createVirtualClient, account, ws_url)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
yield gen.sleep(0.1)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
ioloop.IOLoop.current().run_sync(main)
|
9
server/tools/robot/virtualclient/robot.bat
Normal file
9
server/tools/robot/virtualclient/robot.bat
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
protoc.exe --proto_path=../../protobuild --python_out=. ../../protobuild/kingsomevs.proto
|
||||||
|
protoc.exe --proto_path=../../protobuild --python_out=. ../../protobuild/messages.proto
|
||||||
|
rename kingsomevs_pb2.py vs_proto_pb2.py
|
||||||
|
rename messages_pb2.py vs_msgid_pb2.py
|
||||||
|
|
||||||
|
start python robot.py ws://118.31.73.76:82 test0001 123456
|
||||||
|
start python robot.py ws://118.31.73.76:82 test0002 123456
|
||||||
|
start python robot.py ws://118.31.73.76:82 test0003 123456
|
||||||
|
start python robot.py ws://118.31.73.76:82 test0004 123456
|
146
server/tools/robot/virtualclient/robot.py
Normal file
146
server/tools/robot/virtualclient/robot.py
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import websocket
|
||||||
|
import sys
|
||||||
|
import ssl
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import cs_proto_pb2
|
||||||
|
import cs_msgid_pb2
|
||||||
|
|
||||||
|
#from google.protobuf import json_format
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
try:
|
||||||
|
import thread
|
||||||
|
except ImportError:
|
||||||
|
import _thread as thread
|
||||||
|
import time
|
||||||
|
|
||||||
|
def inputCommand(ws):
|
||||||
|
cmdline= raw_input('')
|
||||||
|
idx = cmdline.find(' ')
|
||||||
|
if idx <= 0:
|
||||||
|
cmdline += '()'
|
||||||
|
else:
|
||||||
|
cmdline = cmdline[:idx] + '(' + cmdline[idx + 1:] + ')'
|
||||||
|
msg = eval('cs_proto_pb2.' + cmdline)
|
||||||
|
sendMsg(ws, msg)
|
||||||
|
inputCommand(ws)
|
||||||
|
|
||||||
|
def getSMMsgEnum(sm_msgid):
|
||||||
|
sm_e = cs_msgid_pb2._SMMESSAGEID_E
|
||||||
|
for e in sm_e.values:
|
||||||
|
if e.number == sm_msgid:
|
||||||
|
return e
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getSMMsg(sm_msgid):
|
||||||
|
sm_e = getSMMsgEnum(sm_msgid)
|
||||||
|
msg = eval('cs_proto_pb2.' + sm_e.name[1:] + '()')
|
||||||
|
return msg
|
||||||
|
|
||||||
|
#g_remote_ip = "ws://127.0.0.1:" + sys.argv[1]
|
||||||
|
g_remote_ip = sys.argv[1]
|
||||||
|
g_account_id = sys.argv[2]
|
||||||
|
g_session_id = sys.argv[3]
|
||||||
|
g_seqid = 1000
|
||||||
|
|
||||||
|
recv_buf = bytearray()
|
||||||
|
|
||||||
|
def sendMsg(ws, msg):
|
||||||
|
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
|
||||||
|
global g_seqid
|
||||||
|
++g_seqid
|
||||||
|
msgid = eval('cs_msgid_pb2._' + msg.DESCRIPTOR.name)
|
||||||
|
PACK_SIGN = 'KS'
|
||||||
|
enmsg = bytearray(msg.SerializeToString())
|
||||||
|
pktlen_str = chr(len(enmsg) & 0xFF) + chr(len(enmsg) >> 8 & 0xFF)
|
||||||
|
msgid_str = chr(msgid & 0xFF) + chr(msgid >> 8 & 0xFF)
|
||||||
|
seqid_str = chr(g_seqid & 0xFF) + chr(g_seqid >> 8 & 0xFF) + \
|
||||||
|
chr(g_seqid >> 16 & 0xFF) + chr(g_seqid >> 24 & 0xFF)
|
||||||
|
sign_str = PACK_SIGN
|
||||||
|
reserved_str = chr(0) + chr(0)
|
||||||
|
buff = pktlen_str + msgid_str + seqid_str + sign_str + reserved_str + enmsg
|
||||||
|
ws.send (buff, 2)
|
||||||
|
print time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{'
|
||||||
|
print str(msg),
|
||||||
|
print '}'
|
||||||
|
print ''
|
||||||
|
|
||||||
|
def onMessage(ws, message):
|
||||||
|
global recv_buf
|
||||||
|
|
||||||
|
print 'onMessage', len(message)
|
||||||
|
data = bytearray(message)
|
||||||
|
recv_buf += data
|
||||||
|
parserPacket(ws)
|
||||||
|
|
||||||
|
def parserPacket(ws):
|
||||||
|
global recv_buf
|
||||||
|
while len(recv_buf) >= 8:
|
||||||
|
pktlen = recv_buf[0] + (recv_buf[1] << 8)
|
||||||
|
msgid = recv_buf[2] + (recv_buf[3] << 8)
|
||||||
|
seqid = recv_buf[4] + \
|
||||||
|
(recv_buf[5] << 8) + \
|
||||||
|
(recv_buf[6] << 16) + \
|
||||||
|
(recv_buf[7] << 24)
|
||||||
|
sign = recv_buf[8] + (recv_buf[9] << 8)
|
||||||
|
resv = recv_buf[10] + (recv_buf[11] << 8)
|
||||||
|
if len(recv_buf) >= 12 + pktlen:
|
||||||
|
msgbody = recv_buf[12 : 12 + pktlen]
|
||||||
|
onUserPacket(ws, msgid, msgbody)
|
||||||
|
recv_buf = recv_buf[12 + pktlen:]
|
||||||
|
|
||||||
|
def onUserPacket(ws, msgid, msgbody):
|
||||||
|
try:
|
||||||
|
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
|
||||||
|
msg = getSMMsg(msgid)
|
||||||
|
ret = msg.ParseFromString(str(msgbody))
|
||||||
|
print len(msgbody)
|
||||||
|
print time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{'
|
||||||
|
print str(msg),
|
||||||
|
print '}'
|
||||||
|
print ''
|
||||||
|
if msgid == cs_msgid_pb2._SMTestAward:
|
||||||
|
print msg.default_123456
|
||||||
|
except Exception, e:
|
||||||
|
print 'onUserPacket', e
|
||||||
|
|
||||||
|
def onError (ws, error):
|
||||||
|
print (error)
|
||||||
|
|
||||||
|
def onClose (ws):
|
||||||
|
print ("### closed ###")
|
||||||
|
|
||||||
|
def opOpen (ws):
|
||||||
|
print 'opOpen', time.time()
|
||||||
|
def run (*args):
|
||||||
|
global g_remote_ip
|
||||||
|
global g_account_id
|
||||||
|
global g_session_id
|
||||||
|
msg = cs_proto_pb2.CMLogin()
|
||||||
|
msg.server_id = 1
|
||||||
|
msg.account_id = g_account_id
|
||||||
|
msg.session_id = g_session_id
|
||||||
|
msg.device_id = '123456'
|
||||||
|
print msg.DESCRIPTOR.name, 'zzzzz'
|
||||||
|
sendMsg(ws, msg)
|
||||||
|
while True:
|
||||||
|
inputCommand(ws)
|
||||||
|
time.sleep(500)
|
||||||
|
ws.close ()
|
||||||
|
print ("thread terminating...")
|
||||||
|
thread.start_new_thread (run, ())
|
||||||
|
|
||||||
|
print time.time()
|
||||||
|
print g_remote_ip
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
websocket.enableTrace(True)
|
||||||
|
ws = websocket.WebSocketApp (g_remote_ip,
|
||||||
|
on_message = onMessage,
|
||||||
|
on_error = onError,
|
||||||
|
on_close = onClose
|
||||||
|
)
|
||||||
|
ws.on_open = opOpen
|
||||||
|
ws.run_forever ()
|
3
server/tools/robot/virtualclient/robot1.sh
Executable file
3
server/tools/robot/virtualclient/robot1.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
python robot.py ws://127.0.0.1:8999 test0001 123456
|
9
server/tools/robot/virtualclient/robot2.bat
Normal file
9
server/tools/robot/virtualclient/robot2.bat
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
protoc.exe --proto_path=../../protobuild --python_out=. ../../protobuild/kingsomevs.proto
|
||||||
|
protoc.exe --proto_path=../../protobuild --python_out=. ../../protobuild/messages.proto
|
||||||
|
rename kingsomevs_pb2.py vs_proto_pb2.py
|
||||||
|
rename messages_pb2.py vs_msgid_pb2.py
|
||||||
|
|
||||||
|
rem start python robot.py wss://matchvs-test.kingsome.cn/websocket test00010 123456
|
||||||
|
start python robot.py wss://matchvs-test.kingsome.cn/websocket test0001 123456
|
||||||
|
start python robot.py wss://matchvs-test.kingsome.cn/websocket test0003 123456
|
||||||
|
start python robot.py wss://matchvs-test.kingsome.cn/websocket test0004 123456
|
3
server/tools/robot/virtualclient/robot2.sh
Executable file
3
server/tools/robot/virtualclient/robot2.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
python robot.py ws://127.0.0.1:8999 test0002 123456
|
165
server/tools/robot/virtualclient/robot3.py
Normal file
165
server/tools/robot/virtualclient/robot3.py
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import websocket
|
||||||
|
import sys
|
||||||
|
import ssl
|
||||||
|
import json
|
||||||
|
import datetime
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
import cs_proto_pb2
|
||||||
|
import cs_msgid_pb2
|
||||||
|
|
||||||
|
#from google.protobuf import json_format
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
try:
|
||||||
|
import thread
|
||||||
|
except ImportError:
|
||||||
|
import _thread as thread
|
||||||
|
import time
|
||||||
|
|
||||||
|
def getSession(account_id):
|
||||||
|
url = 'https://login-test.kingsome.cn/webapp/index.php?c=Login&a=auth&'
|
||||||
|
params = {
|
||||||
|
'openid': sys.argv[2],
|
||||||
|
'token': sys.argv[2],
|
||||||
|
'gameid': 1008,
|
||||||
|
'channel': '6000'
|
||||||
|
}
|
||||||
|
real_url = url + urllib.parse.urlencode(params)
|
||||||
|
print(real_url)
|
||||||
|
req = urllib.request.Request(real_url)
|
||||||
|
data = urllib.request.urlopen(req).read()
|
||||||
|
return json.loads(data.decode('utf-8'))['session_id']
|
||||||
|
|
||||||
|
def inputCommand(ws):
|
||||||
|
cmdline= input('')
|
||||||
|
idx = cmdline.find(' ')
|
||||||
|
if idx <= 0:
|
||||||
|
cmdline += '()'
|
||||||
|
else:
|
||||||
|
cmdline = cmdline[:idx] + '(' + cmdline[idx + 1:] + ')'
|
||||||
|
msg = eval('cs_proto_pb2.' + cmdline)
|
||||||
|
sendMsg(ws, msg)
|
||||||
|
inputCommand(ws)
|
||||||
|
|
||||||
|
def getSMMsgEnum(sm_msgid):
|
||||||
|
sm_e = cs_msgid_pb2._SMMESSAGEID_E
|
||||||
|
for e in sm_e.values:
|
||||||
|
if e.number == sm_msgid:
|
||||||
|
return e
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getSMMsg(sm_msgid):
|
||||||
|
sm_e = getSMMsgEnum(sm_msgid)
|
||||||
|
msg = eval('cs_proto_pb2.' + sm_e.name[1:] + '()')
|
||||||
|
return msg
|
||||||
|
|
||||||
|
#g_remote_ip = "ws://127.0.0.1:" + sys.argv[1]
|
||||||
|
g_remote_ip = sys.argv[1]
|
||||||
|
g_account_id = '6000_1008_' + sys.argv[2]
|
||||||
|
g_session_id = sys.argv[3]
|
||||||
|
g_server_id = sys.argv[4]
|
||||||
|
g_seqid = 1000
|
||||||
|
|
||||||
|
recv_buf = bytearray()
|
||||||
|
|
||||||
|
def sendMsg(ws, msg):
|
||||||
|
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'))
|
||||||
|
global g_seqid
|
||||||
|
++g_seqid
|
||||||
|
msgid = eval('cs_msgid_pb2._' + msg.DESCRIPTOR.name)
|
||||||
|
|
||||||
|
enmsg = msg.SerializeToString()
|
||||||
|
pktlen_str = bytes([(len(enmsg) & 0xFF) , (len(enmsg) >> 8 & 0xFF)])
|
||||||
|
msgid_str = bytes([(msgid & 0xFF) , (msgid >> 8 & 0xFF)])
|
||||||
|
seqid_str = bytes([(g_seqid & 0xFF) , (g_seqid >> 8 & 0xFF) , \
|
||||||
|
(g_seqid >> 16 & 0xFF) , (g_seqid >> 24 & 0xFF)])
|
||||||
|
sign_str = bytes([ord('K'), ord('S')])
|
||||||
|
reserved_str = bytes([0, 0])
|
||||||
|
buff = pktlen_str + msgid_str + seqid_str + sign_str + reserved_str + enmsg
|
||||||
|
|
||||||
|
ws.send (buff, 2)
|
||||||
|
print(time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{')
|
||||||
|
print(str(msg),)
|
||||||
|
print('}')
|
||||||
|
print('')
|
||||||
|
|
||||||
|
def onMessage(ws, message):
|
||||||
|
global recv_buf
|
||||||
|
|
||||||
|
print('onMessage', len(message))
|
||||||
|
data = bytearray(message)
|
||||||
|
recv_buf += data
|
||||||
|
parserPacket(ws)
|
||||||
|
|
||||||
|
def parserPacket(ws):
|
||||||
|
global recv_buf
|
||||||
|
while len(recv_buf) >= 8:
|
||||||
|
pktlen = recv_buf[0] + (recv_buf[1] << 8)
|
||||||
|
msgid = recv_buf[2] + (recv_buf[3] << 8)
|
||||||
|
seqid = recv_buf[4] + \
|
||||||
|
(recv_buf[5] << 8) + \
|
||||||
|
(recv_buf[6] << 16) + \
|
||||||
|
(recv_buf[7] << 24)
|
||||||
|
sign = recv_buf[8] + (recv_buf[9] << 8)
|
||||||
|
resv = recv_buf[10] + (recv_buf[11] << 8)
|
||||||
|
if len(recv_buf) >= 12 + pktlen:
|
||||||
|
msgbody = recv_buf[12 : 12 + pktlen]
|
||||||
|
onUserPacket(ws, msgid, msgbody)
|
||||||
|
recv_buf = recv_buf[12 + pktlen:]
|
||||||
|
|
||||||
|
def onUserPacket(ws, msgid, msgbody):
|
||||||
|
try:
|
||||||
|
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'))
|
||||||
|
msg = getSMMsg(msgid)
|
||||||
|
ret = msg.ParseFromString(msgbody)
|
||||||
|
print(len(msgbody))
|
||||||
|
print(time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{')
|
||||||
|
print(str(msg),)
|
||||||
|
print('}')
|
||||||
|
print('')
|
||||||
|
if msgid == cs_msgid_pb2._SMTestAward:
|
||||||
|
print(msg.default_123456)
|
||||||
|
except Exception as e:
|
||||||
|
print('onUserPacket', e)
|
||||||
|
|
||||||
|
def onError (ws, error):
|
||||||
|
print (error)
|
||||||
|
|
||||||
|
def onClose (ws):
|
||||||
|
print ("### closed ###")
|
||||||
|
|
||||||
|
def opOpen (ws):
|
||||||
|
print('opOpen', time.time())
|
||||||
|
def run (*args):
|
||||||
|
global g_remote_ip
|
||||||
|
global g_account_id
|
||||||
|
global g_session_id
|
||||||
|
global g_server_id
|
||||||
|
msg = cs_proto_pb2.CMLogin()
|
||||||
|
msg.server_id = int(g_server_id)
|
||||||
|
msg.account_id = g_account_id
|
||||||
|
msg.session_id = getSession(g_account_id)
|
||||||
|
msg.device_id = '123456'
|
||||||
|
print(msg.DESCRIPTOR.name, 'zzzzz')
|
||||||
|
sendMsg(ws, msg)
|
||||||
|
while True:
|
||||||
|
inputCommand(ws)
|
||||||
|
time.sleep(500)
|
||||||
|
ws.close ()
|
||||||
|
print ("thread terminating...")
|
||||||
|
thread.start_new_thread (run, ())
|
||||||
|
|
||||||
|
print(time.time())
|
||||||
|
print(g_remote_ip)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
websocket.enableTrace(True)
|
||||||
|
ws = websocket.WebSocketApp (g_remote_ip,
|
||||||
|
on_message = onMessage,
|
||||||
|
on_error = onError,
|
||||||
|
on_close = onClose
|
||||||
|
)
|
||||||
|
ws.on_open = opOpen
|
||||||
|
ws.run_forever ()
|
3
server/tools/robot/virtualclient/robot3.sh
Executable file
3
server/tools/robot/virtualclient/robot3.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
python robot.py ws://127.0.0.1:8999 test0003 123456
|
3
server/tools/robot/virtualclient/robot4.sh
Executable file
3
server/tools/robot/virtualclient/robot4.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
python robot.py ws://127.0.0.1:8999 test0004 123456
|
108
server/tools/robot/virtualclient/virtualclient.py
Normal file
108
server/tools/robot/virtualclient/virtualclient.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import time
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from tornado import gen
|
||||||
|
from tornado import httpclient
|
||||||
|
from tornado import httputil
|
||||||
|
from tornado import ioloop
|
||||||
|
from tornado import websocket
|
||||||
|
|
||||||
|
import cs_proto_pb2
|
||||||
|
import cs_msgid_pb2
|
||||||
|
|
||||||
|
def getSMMsgEnum(sm_msgid):
|
||||||
|
sm_e = cs_msgid_pb2._SMMESSAGEID_E
|
||||||
|
for e in sm_e.values:
|
||||||
|
if e.number == sm_msgid:
|
||||||
|
return e
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getSMMsg(sm_msgid):
|
||||||
|
sm_e = getSMMsgEnum(sm_msgid)
|
||||||
|
msg = eval('cs_proto_pb2.' + sm_e.name[1:] + '()')
|
||||||
|
return msg
|
||||||
|
|
||||||
|
class VirtualClient(object):
|
||||||
|
|
||||||
|
def __init__(self, ws_url, account):
|
||||||
|
self.ws_url = ws_url
|
||||||
|
self.account = account
|
||||||
|
print(self.ws_url)
|
||||||
|
|
||||||
|
@gen.coroutine
|
||||||
|
def co_connect(self):
|
||||||
|
print("connect, account:%s" % self.account)
|
||||||
|
conn = yield websocket.websocket_connect(self.ws_url)
|
||||||
|
assert conn
|
||||||
|
ioloop.IOLoop.current().spawn_callback(self.co_receiveMessage, conn)
|
||||||
|
self.sendLogin(conn)
|
||||||
|
|
||||||
|
def sendMsg(self, conn, msg):
|
||||||
|
seqid = 1
|
||||||
|
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'))
|
||||||
|
msgid = eval('cs_msgid_pb2._' + msg.DESCRIPTOR.name)
|
||||||
|
PACK_SIGN = 'KS'
|
||||||
|
enmsg = bytearray(msg.SerializeToString())
|
||||||
|
pktlen_str = chr(len(enmsg) & 0xFF) + chr(len(enmsg) >> 8 & 0xFF)
|
||||||
|
msgid_str = chr(msgid & 0xFF) + chr(msgid >> 8 & 0xFF)
|
||||||
|
seqid_str = chr(seqid & 0xFF) + chr(seqid >> 8 & 0xFF) + \
|
||||||
|
chr(seqid >> 16 & 0xFF) + chr(seqid >> 24 & 0xFF)
|
||||||
|
sign_str = PACK_SIGN
|
||||||
|
reserved_str = chr(0) + chr(0)
|
||||||
|
buff = pktlen_str + msgid_str + seqid_str + sign_str + reserved_str + enmsg.decode('utf-8')
|
||||||
|
conn.write_message(buff.encode('utf-8'), True)
|
||||||
|
print(time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{')
|
||||||
|
print(str(msg), end='')
|
||||||
|
print('}', end='')
|
||||||
|
print('')
|
||||||
|
|
||||||
|
def sendLogin(self, conn):
|
||||||
|
msg = cs_proto_pb2.CMLogin()
|
||||||
|
msg.server_id = 1
|
||||||
|
msg.account_id = self.account
|
||||||
|
msg.session_id = '12342'
|
||||||
|
msg.device_id = '123456'
|
||||||
|
self.sendMsg(conn, msg)
|
||||||
|
|
||||||
|
def parsePacket(self, conn, recv_buf):
|
||||||
|
while len(recv_buf) >= 8:
|
||||||
|
pktlen = recv_buf[0] + (recv_buf[1] << 8)
|
||||||
|
msgid = recv_buf[2] + (recv_buf[3] << 8)
|
||||||
|
seqid = recv_buf[4] + \
|
||||||
|
(recv_buf[5] << 8) + \
|
||||||
|
(recv_buf[6] << 16) + \
|
||||||
|
(recv_buf[7] << 24)
|
||||||
|
sign = recv_buf[8] + (recv_buf[9] << 8)
|
||||||
|
resv = recv_buf[10] + (recv_buf[11] << 8)
|
||||||
|
if len(recv_buf) >= 12 + pktlen:
|
||||||
|
msgbody = recv_buf[12 : 12 + pktlen]
|
||||||
|
self.onReceiveUserPacket(conn, msgid, msgbody)
|
||||||
|
recv_buf = recv_buf[12 + pktlen:]
|
||||||
|
|
||||||
|
def onReceiveUserPacket(self, conn, msgid, msgbody):
|
||||||
|
try:
|
||||||
|
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'))
|
||||||
|
msg = getSMMsg(msgid)
|
||||||
|
ret = msg.ParseFromString(msgbody)
|
||||||
|
print(len(msgbody))
|
||||||
|
print(time.time(), time.strftime('[%H:%M:%S]'), msg.DESCRIPTOR.name + '{')
|
||||||
|
print(str(msg), end='')
|
||||||
|
print('}')
|
||||||
|
print('')
|
||||||
|
except Exception as e:
|
||||||
|
print('onReceiveUserPacket', e)
|
||||||
|
|
||||||
|
@gen.coroutine
|
||||||
|
def co_receiveMessage(self, conn):
|
||||||
|
recv_buf = bytearray()
|
||||||
|
while True:
|
||||||
|
data = yield conn.read_message()
|
||||||
|
if data is None:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
recv_buf += data
|
||||||
|
self.parsePacket(conn, recv_buf)
|
||||||
|
|
||||||
|
@gen.coroutine
|
||||||
|
def run(self):
|
||||||
|
ioloop.IOLoop.current().spawn_callback(self.co_connect)
|
Loading…
x
Reference in New Issue
Block a user