作者 lemon

修复心跳与转移逻辑为自动调度

... ... @@ -7,6 +7,7 @@
import functools
import json
from apscheduler.schedulers.tornado import TornadoScheduler
from tornado import ioloop
from conf import settings
... ... @@ -53,6 +54,7 @@ def host():
def connect_success(sock):
print(monitor._name, '连接成功->', sock.ws_url)
if monitor._temp_socket == sock:
sock.auto_reconnet = True # 新的连接成功后把断线重连开启
monitor._socket.quit() # 旧的断开
... ... @@ -74,11 +76,20 @@ def set_new_server_func(sock):
def run():
# init socket start
socket = MessageSocketClient(connect_success, message_receive)
set_new_server_func(socket)
monitor.bind(socket)
conf = settings.get_server()
conf.update({'url': monitor._host, 'name': monitor._name, 'uuid': monitor._imei})
socket.connect(**conf)
monitor.bind(socket)
# init socket end
# init schedule start
sched = TornadoScheduler()
sched.add_job(monitor._socket.sendheartbeat, 'interval', seconds=25)
sched.add_job(monitor._socket.auto_move_server, 'interval', seconds=31)
sched.start()
# init schedule end
ioloop.IOLoop.instance().start()
... ...
... ... @@ -254,7 +254,7 @@ class FacebookClient(Client):
"/settings/name_change_preview/", data)
return res
def saveName(self, display_format, save_password, primary_first, primary_middle, primary_last):
def saveName(self, save_password, primary_first, primary_last, primary_middle=None, display_format='complete'):
data = {
'display_format': display_format,
'save_password': save_password,
... ... @@ -265,7 +265,15 @@ class FacebookClient(Client):
# 'alternate_name': 'lin wei quan', 'show_alternate': '1'
res = self._post(
"/ajax/settings/account/name.php", data)
return res
status = res['jsmods']['require'][0][1]
if status == 'addError':
html = res['jsmods']['require'][0][3][0]['__html']
return {'success': False, 'error': parse_html.get_div_text(html)}
elif status == 'setPreviewForCurrent':
html = res['jsmods']['require'][0][3][0]['__html']
return {'success': True, 'msg': parse_html.get_div_text(html)}
raise BaseException('未知错误:' + json.dumps(res['jsmods']['require']))
def uploudAvatar(self, binary):
files = {
... ... @@ -823,3 +831,27 @@ class FacebookClient(Client):
if 'fbSettingsListItem' in res['domops'][0][1]:
return {"success": True}
return {"success": False}
def setBirthday(self, year, month, day):
data = {
'privacy[8787510733]': PostParam.EVERYONE.value,
'privacy[8787805733]': PostParam.EVERYONE.value,
'birthday_month': month, 'birthday_day': day, 'birthday_year': year,
'birthday_confirmation': '1',
'bd_surface': 'www_profile', 'edit_birthday_allowed': '0',
'__submit__': '1', 'nctr[_mod]': 'pagelet_basic'
}
res = self._post('/profile/edit/infotab/save/birthday/', data)
html = parse_html.get_domops_3(res)
if 'birthday' in html:
return {"success": True}
else:
raise BaseException("未知错误:", html)
def setLanguage(self, language):
data = {
'new_language': language,
'new_fallback_language': '',
}
res = self._post('/ajax/settings/language/account.php', data)
return {"success": True}
... ...
... ... @@ -8,8 +8,6 @@ import datetime
import functools
import json
import random
import time
from threading import Timer
from tornado import gen
from tornado import httpclient
... ... @@ -135,8 +133,6 @@ class MessageSocketClient(WebSocketClient):
self.connect_timeout,
self.request_timeout)
self._later_handler['move_server'] = self._io_loop.call_later(random.randint(30, 60), self.auto_move_server)
def new_server_func(self):
return self.ws_url, False
... ... @@ -146,8 +142,8 @@ class MessageSocketClient(WebSocketClient):
def auto_move_server(self):
ws_url, move = self.new_server_func()
if move:
print('需要移动->', ws_url)
self.server_replace(ws_url)
self._later_handler['move_server'] = self._io_loop.call_later(random.randint(30, 30), self.auto_move_server)
def connect(self, url, name, uuid, reconnect=True, reconnect_interval=3):
self.ws_url = url
... ... @@ -161,8 +157,6 @@ class MessageSocketClient(WebSocketClient):
def on_connection_success(self):
if self._connect_success:
self._connect_success(self)
self._later_handler['heartbeat'] = self._io_loop.call_later(self.heartbeat_interval_in_secs,
functools.partial(self.sendheartbeat, self.ws_url))
def on_connection_close(self, reason):
print('%s Connection closed reason=%s' % (self.ws_url, reason,))
... ... @@ -179,16 +173,10 @@ class MessageSocketClient(WebSocketClient):
def payload_data(self):
return {"type": "ping"}
def sendheartbeat(self, _url):
def sendheartbeat(self):
print(datetime.datetime.now(), "发送❤️")
if self.ws_url == _url:
msg = self.payload_data()
bool = self.send(msg) if msg else False
if msg is None or bool:
self._later_handler['heartbeat'] = self._io_loop.call_later(self.heartbeat_interval_in_secs,
functools.partial(self.sendheartbeat,
self.ws_url))
msg = self.payload_data()
self.send(msg)
def on_message(self, msg):
if not self._message_receive:
... ... @@ -201,3 +189,19 @@ class MessageSocketClient(WebSocketClient):
self.close("quit")
for k, handler in self._later_handler.items():
self._io_loop.remove_timeout(handler)
if __name__ == '__main__':
from apscheduler.schedulers.tornado import TornadoScheduler
def run():
print(1)
sock = MessageSocketClient()
sched = TornadoScheduler()
sched.add_job(run, 'interval', seconds=3)
sched.start()
sock._io_loop.instance().start()
... ...
... ... @@ -7,4 +7,5 @@ munch==2.5.0
furl==2.1.0
sqlalchemy==1.3.12
psutil==5.6.7
demjson==2.2.4
\ No newline at end of file
demjson==2.2.4
apscheduler==3.6.3
\ No newline at end of file
... ...