同步操作将从 mktime/python-learn 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python# -*- coding: utf-8 -*-#Used update game path to serverimport os,re,sys,urllib,urllib2,hashlib,time,shutil,platformdef post(status, type, info, err_info=""):post_url = args["post_url"]aid = args["aid"]data = {"aid": aid, "status": status, "type": type, "info": info}if err_info:data = {"aid": aid, "status": status, "type": type, "info": info, "err_info": err_info}print dataf = urllib2.urlopen(url=post_url, data=urllib.urlencode(data))def md5sum(file_name):if os.path.isfile(file_name):f = open(file_name,'rb')py_ver = sys.version[:3]if py_ver == "2.4":import md5 as hashlibelse:import hashlibmd5 = hashlib.md5(f.read()).hexdigest()f.close()return md5else:return 0def config(args,files):try:game = args["main_prefix"]url = "http://208.asktao.com/autoupdate/%s/config.ini" % gameget = urllib.urlopen(url)aa = get.readlines()w = {}for i in aa:a = i.strip().split()[0]if "[" in a:x = a.strip("[]")w[x] = {}continuew[x][i.strip().split()[1].strip()] = i.strip().split()[0].strip()for key in w:if key == files:return w[key]except Exception,e:return 0class down_start():def work(self,args):aa = config(args,"path_md5")game = args["main_prefix"]if aa == 0:post(2,"read update config","Not find %s config file" % game)sys.exit()local = '/data/autoupdate/'url = "http://208.asktao.com/autoupdate/%s/" % gamefor f in aa:md5_r = f.strip().split()[0]pkg_name = f.strip().split()[1]get = urllib.urlopen(os.path.join(url,pkg_name))status = get.getcode()if status == 200:#验证MD5,MD5错误的话重新下载一次,再次错误就提示失败,退出程序urllib.urlretrieve(os.path.join(url,pkg_name),os.path.join(local,pkg_name),)md5_l = md5sum(os.path.join(local,pkg_name))if md5_l == md5_r:post(1,"down",pkg_name)else:urllib.urlretrieve(os.path.join(url,pkg_name),os.path.join(local,pkg_name),)md5_l = md5sum(os.path.join(local,pkg_name))if md5_l == md5_r:post(1,"down",pkg_name)else:post(2,"down",pkg_name,"Download %s,MD5 not right" % pkg_name)sys.exit()else:post(2,"down",pkg_name,"Not find %s path file" % pkg_name)# 检查rsync服务是否启动while True:pid = os.popen("ps auxww | grep 'rsync --daemon' | grep -v grep").read()if not pid:getso("/usr/bin/rsync --daemon")continuebreak#全部完成,更新中心状态post(1,"down","down_done")class sync_start():def rsync(self,update_pkg,args):node_ip = args["node_ip"]game = args["main_prefix"]os_type = platform.system()if os_type == "Windows":local = "C:\\update\\"elif os_type == "Linux":local = "/home/update/tmp/"if not os.path.isdir(local):os.mkdir(local)for f in os.listdir(local):if os.path.isfile(f):os.remove(os.path.join(local,f))elif os.path.isdir(f):shutil.rmtree(os.path.join(local,f))aa = config(args,"path")if aa == 0:post(2,"read update config","Not find %s config file" % game)sys.exit()for f in aa:if update_pkg in f:md5_r = aa[f]pkg_name = fif os_type == "Windows":sync = "rsync -avz %s::update/*%s* /cygdrive/c/update/" % (node_ip,update_pkg)elif os_type == "Linux":sync = "rsync -avz %s::update/*%s* /home/update/tmp/" % (node_ip,update_pkg)result = os.popen(sync).readlines()md5_l = md5sum(os.path.join(local,pkg_name))if md5_l == md5_r:post(1,"sync",pkg_name)else:if os_type == "Windows":sync = "rsync -avz %s::update/*%s* /cygdrive/c/update/" % (node_ip,update_pkg)elif os_type == "Linux":sync = "rsync -avz %s::update/*%s* /home/update/tmp/" % (node_ip,update_pkg)result = os.popen(sync).readlines()md5_l = md5sum(os.path.join(local,pkg_name))if md5_l == md5_r:post(1,"sync",pkg_name)else:post(2,"rsync",pkg_name,"sync Error,%s not find or file's md5 wrong" % pkg_name)sys.exit()def work(self,args):update_pkg = args["update_pkg"].split(',')for i in range(len(update_pkg)):self.rsync(update_pkg[i],args)post(1,"sync","sync_done")class update_start():def copy(self,src, dst):if os.path.isdir(src):base = os.path.basename(src)if os.path.exists(dst):dst = os.path.join(dst, base)if not os.path.exists(dst):os.makedirs(dst)names = os.listdir(src)for name in names:srcname = os.path.join(src, name)self.copy(srcname, dst)else:shutil.copy2(src, dst)def unrar(self,src,dst,args):os_type = platform.system()try:if not os.path.exists(dst) or not os.path.exists(src):raise Exception, "%s or %s not exist!" % (src, dst)if os_type == "Windows":os.system(r'C:\Progra~1\WinRAR\rar x -o+ -inul %s %s' % (src, dst))elif os_type == "Linux":if os.path.splitext(src)[1] == ".tgz":os.system("tar -zxf %s -C %s" % (src, dst))elif os.path.splitext(src)[1] == ".zip":os.system("unzip -oq %s -d %s" % (src, dst))return 0except Exception,e:return edef work(self,args):os_type = platform.system()if os_type == "Windows":update = "C:\\update\\"elif os_type == "Linux":update = "/home/update/tmp/"server_dir = {"tmcs":"C:\\Server\\","wd":"/home/asktao/"}server = server_dir[args["main_prefix"]]update_pkg = args["update_pkg"].split(',')game = args["main_prefix"]for i in range(len(update_pkg)):#####################解压更新包for tgz in os.listdir(update):if update_pkg[i] in tgz:src = os.path.join(update,tgz)r = self.unrar(src,update,args)if r == 0:post(1,"update","%s unzip success" % src)else:post(2,"update",src,"unzip fail:%s" % r)#####################拷贝更新文件到游戏目录ser_list = os.listdir(server)up_list = os.listdir(update)for dir in up_list:for line in ser_list:filepath = os.path.join(update,dir+"\\")serv = os.path.join(server,line+"\\")if dir in line:self.copy(filepath,serv)post(1,"update","%s files copy success" % line)#####################验证重要文件MD5aa = config(args,"files")if aa == 0:post(2,"read update config","Not find %s config file" % game)sys.exit()for f in aa:md5_r = aa[f]pkg_name = fif os.path.exists(pkg_name):md5_s = md5sum(pkg_name)if md5_r == md5_s:post(1,"update","%s md5 Ok,update success" % pkg_name)else:post(2,"update","%s md5 Error,update fail" % pkg_name)sys.exit()shutil.rmtree(update)os.mkdir(update)post(1,"update","All_done")if __name__ == "__main__":args = {"pack":"auto_update","func1":"down_start","url":"http://208.2222.com/manage/auto_update","post_url":"http://192.168.50.209/reg.php","update_pkg":"up,up","node_ip":"192.168.50.208","main_prefix":"tmcs","aid":"123"}#down = down_start()#down.work(args)sync = sync_start()sync.work(args)update = update_start()update.work(args)[files]#需要验证MD5的重要文件绝对路径和MD515a6605156e29f68fdfd637e73a889d4 C:\Server\Line1\SAFlashPlayer.exe15a6605156e29f68fdfd637e73a889d4 C:\Server\Line2\SAFlashPlayer.exe[path]#更新包名字和MD532fcb8932799aa553db13b5b9b41e5e9 auto.rar32fcb8932799aa553db13b5b9b41e5e9 update.rar
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。