Exemplo n.º 1
0
def load_rolelable():
    root = gl.get_value("root")
    po_cnt = tk.StringVar()
    po_cnt.set("0")
    gl.set_value("po_cnt", po_cnt)
    police_lable_img = tk.Label(root,
                                image=gc.get_value("policeTK"),
                                width=70,
                                height=70)
    police_lable = tk.Label(root,
                            image=gc.get_value("boardTK"),
                            font=("Helvetica", 34, "bold"),
                            textvariable=po_cnt,
                            compound=tk.CENTER,
                            height=60)

    police_lable_img.place(relx=0.7, rely=0.07)
    police_lable.place(relx=0.8, rely=0.07)

    lm_cnt = tk.StringVar()
    lm_cnt.set("0")
    gl.set_value("lm_cnt", lm_cnt)
    lm_lable_img = tk.Label(root,
                            image=gc.get_value("lmTK"),
                            width=50,
                            height=50)
    lm_lable = tk.Label(root,
                        image=gc.get_value("boardTK"),
                        textvariable=lm_cnt,
                        font=("Helvetica", 34, "bold"),
                        compound=tk.CENTER,
                        height=60)
    lm_lable_img.place(relx=0.713, rely=0.21)
    lm_lable.place(relx=0.8, rely=0.2)
def process_one_cat(url, cat_list):
    PAGE_NUM_PROCESSING = 1
    global_var._init()
    global_var.set_value("PAGE_NUM_PROCESSING", PAGE_NUM_PROCESSING)
    global_var.set_value("isLastPage", False)
    while True:
        page_num = global_var.get_value('PAGE_NUM_PROCESSING')
        tmp_url = url + str(page_num) + "/"
        # getJobList(tmp_url)
        print("while True main:" + tmp_url)
        s = requests.Session()
        lg = Lagou()
        pagegen = lg.getJobListPerPage(tmp_url, s)
        for item in pagegen:
            time_wait = 1 + float(random.randint(1, 100)) / 20
            time.sleep(time_wait)
            print("休息时间:" + str(time_wait))
            for job in item:
                db.insert(job, cat_list)
        print("跳出生成器")
        print("休息5秒钟")
        time.sleep(5)

        if global_var.get_value("isLastPage"):
            print("----------爬取结束---------,共" +
                  str(global_var.get_value('PAGE_NUM_PROCESSING')) + "页")
            break
Exemplo n.º 3
0
def PO_move(i, j):
    aux = index_to_xy([i + 1, j + 1])
    cv = gl.get_value("cv")
    PO = gl.get_value("PO")
    po_cnt = gl.get_value("po_cnt")
    po_cnt.set(int(po_cnt.get()) + 1)
    cv.coords(PO, (aux[0], aux[1]))
    gl.set_value("poij", [i + 1, j + 1])
Exemplo n.º 4
0
def load_restart_button():
    root = gl.get_value("root")
    restart_button = tk.Button(root,
                               image=gc.get_value("restartTK"),
                               relief=tk.FLAT,
                               bd=0,
                               command=cmd.restart)
    gl.set_value("restart_button", restart_button)
    restart_button.place(relx=0.92, rely=0.44)
Exemplo n.º 5
0
def load_hint():
    root = gl.get_value("root")
    HINT = tk.StringVar()
    HINT.set("摩尔庄园,快乐童年!")
    gl.set_value("HINT", HINT)
    tao_lable = tk.Label(root,
                         bd=0,
                         font=("Helvetica", 9, "bold"),
                         textvariable=HINT)
    tao_lable.place(relx=0.3, rely=0.965)
Exemplo n.º 6
0
def load_music_button():
    root = gl.get_value("root")
    music_button = tk.Button(root,
                             image=gc.get_value("voiceoffTK"),
                             relief=tk.FLAT,
                             bd=0,
                             command=cmd.music_on_off)
    gl.set_value("music_ctrl", -1)
    gl.set_value("music_button", music_button)
    music_button.place(relx=0.94, rely=0.38)
Exemplo n.º 7
0
def load_sel_role():
    # 0->rk, 1->po, 2->lm
    gl.set_value("sel_role", 0)
    root = gl.get_value("root")
    sel_role_button = tk.Button(root,
                                image=gc.get_value("rk_sTK"),
                                relief=tk.FLAT,
                                bd=0,
                                command=cmd.sel_role)

    gl.set_value("sel_role_button", sel_role_button)
    sel_role_button.place(relx=0.815, rely=0.725)
Exemplo n.º 8
0
def rk_follow():
    rkij = gl.get_value("rkij")
    poij = gl.get_value("poij")
    lmij = gl.get_value("lmij")
    RK = gl.get_value("RK")
    cv = gl.get_value("cv")
    add_row = order(lmij[0] - rkij[0])
    add_col = order(lmij[1] - rkij[1])
    if if_in_range(rkij[0] + add_row, rkij[1] + add_col):
        aux = index_to_xy([rkij[0] + add_row, rkij[1] + add_col])
        cv.coords(RK, (aux[0], aux[1]))
        gl.set_value("rkij", [rkij[0] + add_row, rkij[1] + add_col])
Exemplo n.º 9
0
    def run(self, start, end):
        self.open_list.add(end)  #insert end in open_list
        while True:
            self.process_state()
            if start.t == "close":
                break
        start.set_state("s")
        s = start

        while s != gl.get_value("end"):
            s.set_state("s")
            s = s.parent
        s.set_state("e")

        self.map.print_map()
        print("")
        self.map.draw_map(start)
        print("OK")
        tmp = start
        #self.map.set_obstacle([(2, 1), (2, 2), (2, 3), (2, 4)])
        #self.map.erase_obstacle([(2, 0)])
        flag = False
        while tmp != gl.get_value("end"):

            tmp.set_state("*")
            if gl.get_value("if_moved") != True:
                rkij = gl.get_value("rkij")
                self.map.erase_obstacle(utils.set_obstacle(rkij))
                utils.rk_random_move()
                rkij = gl.get_value("rkij")
                poij = gl.get_value("poij")
                gl.set_value("if_moved", True)
                self.map.set_obstacle(utils.set_obstacle(rkij))
                print("----------------------------------")
            #utils.msgbox()

            nr = gl.get_value("nr")
            nc = gl.get_value("nc")
            poij = gl.get_value("poij")
            lmij = gl.get_value("lmij")
            rkij = gl.get_value("rkij")
            self.map.print_map()
            print("")
            if tmp.parent.state == "#":

                utils.obstacle(tmp.x, tmp.y)
                flag = True
                return
            tmp = tmp.parent
            utils.PO_move(tmp.x, tmp.y)

        if flag == False:
            tmp.set_state("e")
Exemplo n.º 10
0
def msgbox():
    rkij = gl.get_value("rkij")
    poij = gl.get_value("poij")
    lmij = gl.get_value("lmij")
    cv = gl.get_value("cv")
    if if_catch(rkij[0], rkij[1], poij[0], poij[1]):
        messagebox.showwarning("ohno!", "被抓住了,再试一次吧!")
        cmd.restart()
    elif lmij[0] == poij[0] and lmij[1] == poij[1]:
        PO = gl.get_value("PO")
        cv.delete(PO)
        messagebox.showwarning("ohyeh!", "与人质相遇!向出口前进!")
        gl.set_value("if_escape", True)
Exemplo n.º 11
0
def loop_role():
    sel_role = gl.get_value("sel_role")
    if gl.get_value("is_start"):
        sel_role += 1
        sel_role %= 2
        gl.set_value("sel_role", sel_role)
        HINT = gl.get_value("HINT")
        sel_role_button = gl.get_value("sel_role_button")
        if sel_role == 0:
            sel_role_button.config(image=gc.get_value("rk_sTK"))
            HINT.set("RK移步")
        elif sel_role == 1:
            sel_role_button.config(image=gc.get_value("police_sTK"))
            HINT.set("警察移步")
Exemplo n.º 12
0
def music_on_off():
    cnt = gl.get_value("music_ctrl")
    gl.set_value("music_ctrl", cnt * (-1))
    if cnt * (-1) > 0:
        filename = 'music/Farm.wav'
        pygame.mixer.init()
        pygame.mixer.music.load(filename)
        pygame.mixer.music.play(loops=-1, start=0.0)
        music_button = gl.get_value("music_button")
        music_button.config(image=gc.get_value("voiceonTK"))
    else:
        pygame.mixer.music.stop()
        music_button = gl.get_value("music_button")
        music_button.config(image=gc.get_value("voiceoffTK"))
Exemplo n.º 13
0
def mode0():
    nr = gl.get_value("nr")
    nc = gl.get_value("nc")
    poij = gl.get_value("poij")
    lmij = gl.get_value("lmij")
    rkij = gl.get_value("rkij")
    print(nr, nc)
    m = Map(int(nr), int(nc))
    m.set_obstacle(utils.set_obstacle(rkij))
    start = m.map[poij[0] - 1][poij[1] - 1]
    end = m.map[lmij[0] - 1][lmij[1] - 1]
    gl.set_value("end", end)
    dstar = Dstar(m)
    dstar.run(start, end)
    utils.msgbox()
Exemplo n.º 14
0
def sel_role():
    sel_role = gl.get_value("sel_role")
    sel_role = (sel_role + 1) % 3
    gl.set_value("sel_role", sel_role)
    HINT = gl.get_value("HINT")
    sel_role_button = gl.get_value("sel_role_button")

    if (gl.get_value("if_start") == False):
        if sel_role == 0:
            sel_role_button.config(image=gc.get_value("rk_sTK"))
            HINT.set("设置RK的位置")
        elif sel_role == 1:
            sel_role_button.config(image=gc.get_value("police_sTK"))
            HINT.set("设置警察的位置")
        elif sel_role == 2:
            sel_role_button.config(image=gc.get_value("lm_sTK"))
            HINT.set("设置小拉姆的位置")
Exemplo n.º 15
0
def rk_random_move():
    #time.sleep(0.5)
    rkij = gl.get_value("rkij")
    lmij = gl.get_value("lmij")
    poij = gl.get_value("poij")
    RK = gl.get_value("RK")
    xx = gl.get_value("xx")
    yy = gl.get_value("yy")
    r = random.randint(0, 7)
    pos = index_to_xy([rkij[0] + xx[r], rkij[1] + yy[r]])
    print(pos)
    if if_in_range(rkij[0] + xx[r], rkij[1] + yy[r]):
        if (rkij[0] + xx[r] != lmij[0] and rkij[1] + yy[r] != lmij[1]):
            if (rkij[0] + xx[r] != poij[0] and rkij[1] + yy[r] != poij[1]):
                cv = gl.get_value("cv")
                cv.coords(RK, pos[0], pos[1])
                gl.set_value("rkij", [rkij[0] + xx[r], rkij[1] + yy[r]])
Exemplo n.º 16
0
def setting():
    top = tk.Toplevel()
    top.title("游戏设置")
    top.geometry("255x160")
    top.attributes()
    top.resizable(width=False, height=False)
    top.iconbitmap("img/ico.ico")
    gl.set_value("top", top)
    buchang = tk.Label(top, text="速度:", bd=0)
    buchang.place(relx=0.08, rely=0.08)


    pol_sped_lable = tk.Label(top, image=gc.get_value("policeTK"), width=20, height=20)
    pol_sped_lable.place(relx=0.1, rely=0.22)
    pol_sped = tk.Spinbox(top, bd=0, from_=1, to=2, increment=1, width=6)
    gl.set_value("pol_sped", pol_sped)
    pol_sped.place(relx=0.23, rely=0.24)

    rk_sped_lable = tk.Label(top, image=gc.get_value("rkTK"), width=20, height=20)
    rk_sped_lable.place(relx=0.55, rely=0.22)
    rk_sped = tk.Spinbox(top, bd=0, from_=1, to=2, increment=1, width=6)
    gl.set_value("rk_sped",rk_sped)
    rk_sped.place(relx=0.68, rely=0.24)

    dituguimo = tk.Label(top, text="地图规模:", bd=0)
    dituguimo.place(relx=0.08, rely=0.45)

    hang = tk.Label(top, text="行:", bd=0)
    hang.place(relx=0.08, rely=0.61)
    row = tk.Spinbox(top, bd=0, from_=15, to=25, increment=1, width=6)
    row.place(relx=0.23, rely=0.61)
    gl.set_value("row", row)

    lie = tk.Label(top, text="列:", bd=0)
    lie.place(relx=0.53, rely=0.61)
    col = tk.Spinbox(top, bd=0, from_=15, to=25, increment=1, width=6)
    col.place(relx=0.68, rely=0.61)
    gl.set_value("col", col)

    doublebutton = tk.Button(top, text="双人游戏", relief=tk.RAISED, bd=1, command=setting_config_double)
    doublebutton.place(relx=0.39, rely=0.8)
    singlebutton = tk.Button(top, text="我是警察", relief=tk.RAISED, bd=1, command=setting_config_single)
    singlebutton.place(relx=0.08, rely=0.8)
    autobutton = tk.Button(top, text="自动寻路", relief=tk.RAISED, bd=1, command=auto_config_single)
    autobutton.place(relx=0.7, rely=0.8)
Exemplo n.º 17
0
def restart():
    init.init_var()
    gl.set_value("if_obs", False)
    gl.set_value("if_moved", False)
    po_cnt = gl.get_value("po_cnt")
    po_cnt.set("0")
    gl.set_value("po_cnt", po_cnt)

    lm_cnt = gl.get_value("lm_cnt")
    lm_cnt.set("0")
    gl.set_value("lm_cnt", lm_cnt)
    gl.set_value("if_escape", False)
    #rk_cnt = gl.get_value("rk_cnt")
    #rk_cnt.set("0")
    #gl.set_value("rk_cnt", rk_cnt)
    HINT = gl.get_value("HINT")
    HINT.set("重置成功!")
    redraw()
Exemplo n.º 18
0
def start():
    po_cnt = gl.get_value("po_cnt")
    po_cnt.set("0")
    gl.set_value("po_cnt", po_cnt)

    lm_cnt = gl.get_value("lm_cnt")
    lm_cnt.set("0")
    gl.set_value("lm_cnt", lm_cnt)

    HINT = gl.get_value("HINT")
    HINT.set("游戏开始!")
    gl.set_value("sel_role", 1)
    sel_role_button = gl.get_value("sel_role_button")
    sel_role_button.config(image=gc.get_value("police_sTK"))
    gl.set_value("if_start", True)
    gl.set_value("if_escape", False)
    if gl.get_value("MODE") == 1:
        game.mode1()
    elif gl.get_value("MODE") == 2:
        game.mode2()
    elif gl.get_value("MODE") == 0:
        game.mode0()
Exemplo n.º 19
0
    def update(value):

        # value对象不为null
        if (value is not None):

            # 获取历史记录数据,跨文件全局变量
            data = get_history_data()
            history_data = global_var.set_value('history_data', data)
            # for i in history_data:
            #     print(i)

            if (history_data != 'error'):
                # 找到
                return 1
            else:
                # 没找到
                return 0
        else:
            return 0
Exemplo n.º 20
0
def draw_map():
    cv = gl.get_value("cv")
    nr = int(gl.get_value("nr"))
    nc = int(gl.get_value("nc"))

    ver_int = int((460 - nr) / (nr - 1))
    gl.set_value("ver_int", ver_int)
    aux = 460 - (ver_int * (nr - 1) + nr)
    top_lef = int(aux / 2 + 20)
    gl.set_value("top_lef", top_lef)
    btm_lef = int(aux - top_lef + 20)

    lev_int = int((560 - nc) / (nc - 1))
    gl.set_value("lev_int", lev_int)
    aux = 560 - (lev_int * (nc - 1) + nc)
    lef_lef = int(aux / 2 + 20)
    gl.set_value("lef_lef", lef_lef)
    rig_lef = int(aux - lef_lef + 20)

    snr = top_lef + 1
    snc = lef_lef
    for i in range(nr):
        snc = lef_lef + 1
        for j in range(nc - 1):
            cv.create_line(snc, snr, snc + lev_int, snr, fill="black", width=1)
            snc = snc + lev_int + 1
        snr = snr + ver_int + 1

    snc = lef_lef + 1
    snr = top_lef
    for i in range(nc):
        snr = top_lef + 1
        for j in range(nr - 1):
            cv.create_line(snc, snr, snc, snr + ver_int, fill="black", width=1)
            snr = snr + ver_int + 1
        snc = snc + lev_int + 1

    init_role_position()
    cv.place(relx=0.04, rely=0.08)
Exemplo n.º 21
0
def redraw():
    root = gl.get_value("root")
    cv = tk.Canvas(root, bg='#AFEEEE', width=600, height=500)
    gl.set_value("cv", cv)
    utils.draw_map()
Exemplo n.º 22
0
def auto_config_single():
    pol_sped = gl.get_value("pol_sped")
    rk_sped = gl.get_value("rk_sped")
    row = gl.get_value("row")
    col = gl.get_value("col")
    gl.set_value("if_start", False)
    gl.set_value("sp", pol_sped.get())
    gl.set_value("sr", rk_sped.get())
    gl.set_value("nr", row.get())
    gl.set_value("nc", col.get())
    HINT = gl.get_value("HINT")
    HINT.set("设置成功!")
    gl.set_value("MODE", 0)
    cmd.redraw()
    top = gl.get_value("top")
    top.destroy()
Exemplo n.º 23
0
def download_paper(treedata, opener, localdir, page_num, page_n_response_url):
    '''
    传入参数:
        treedata:当前列表页的treedata数据
        opener: referer已修改为当前页
        localdir: 保存目录
    '''
    tr_node = treedata.xpath(
        "//tr[@bgcolor='#f6f7fb']|//tr[@bgcolor='#ffffff']")

    if tr_node:
        paper_count = 0
        # 每一次进入详情页面都应该是从列表页进入
        opener.addheaders = [("Referer", page_n_response_url)]
        for item in tr_node:
            paper_count += 1
            paper_title = item.xpath("string(td/a[@class='fz14'])")
            paper_link = item.xpath("td/a[@class='fz14']/@href")
            paper_author = item.xpath("td[@class='author_flag']/a/text()")
            paper_source = item.xpath("td[4]/a/text()")
            paper_pub_date = item.xpath("td[5]/text()")
            paper_db = item.xpath("td[6]/text()")
            paper_cited = item.xpath("td[7]//a/text()")
            paper_download_count = item.xpath("td[8]/span/a/text()")
            print paper_title
            paper_title = paper_title.replace("\\", ""). \
                replace("/", ""). \
                replace(":", ""). \
                replace("*", ""). \
                replace("?", ""). \
                replace("\"", ""). \
                replace("<", ""). \
                replace(">", ""). \
                replace("|", "")

            # 获取paper详情页面链接,访问详情页前,要设置referer
            paper_detail_url_fake = "http://kns.cnki.net" + paper_link[0]
            print paper_detail_url_fake
            try:
                response = opener.open(paper_detail_url_fake)
            except urllib2.HTTPError as error:
                print error.code
                print error.reason
                time.sleep(180)
                continue
            except urllib2.URLError as urlerror:
                print urlerror.reason
                time.sleep(180)
                continue
            else:
                paper_detail_page_treedata = etree.HTML(response.read())
                # 下载前要设置referer为详情页
                opener.addheaders = [("Referer", response.url)]

                # 硕士论文并没有【pdf下载】的链接
                pdf_download_url = paper_detail_page_treedata.xpath(
                    '//*[@id="pdfDown"]/@href')
            if len(pdf_download_url) == 0:
                whole_book_download_url = paper_detail_page_treedata.xpath(
                    '//*[@id="DownLoadParts"]/a[1]/@href')
                download_url = whole_book_download_url[0]
                filename = localdir + str(
                    (page_num - 1) * 20 +
                    paper_count) + "." + paper_title + ".caj"
            else:
                download_url = pdf_download_url[0]
                filename = localdir + str(
                    (page_num - 1) * 20 +
                    paper_count) + "." + paper_title + ".pdf"

            try:
                response_file = opener.open(download_url)
            except urllib2.HTTPError as error:
                print error.code
                print error
                print "没有下载成功的论文:" + paper_title.decode('utf-8').encode('gbk')
                fail_log.write(paper_title)
                fail_log.close()
            except urllib2.URLError as urlerror:
                print urlerror.reason
                fail_log = open("C:/code/cnkiCrawl/log/fail.log", 'a')
                print "没有下载成功的论文:" + paper_title.decode('utf-8').encode('gbk')
                fail_log.write(paper_title)
                fail_log.close()
            else:
                down_file = open(filename, 'wb')
                down_file.write(response_file.read())
                down_file.close()
                global_var.set_value("PAGE_NUM_PROCESSING", page_num)
                print "正在下载页码:" + str(
                    global_var.get_value("PAGE_NUM_PROCESSING"))
                # process_record = open("C:/code/cnkiCrawl/log/process_record.log", "w")
                # process_record.write(str(page_num))
                # process_record.close()
        return True
    else:
        print "获取论文列表失败"
        return False
Exemplo n.º 24
0
import global_var
global_var.set_value('hello', 'aaa')
print(global_var.get_value('hello'))
global_var.set_value('aa', 12312312)
print(global_var.get_value('aa'))

global_var.clear_up()
print(global_var.get_value('hello'))
print(global_var.get_value('aa'))

global_var.set_value('hello', 'bbb')
print(global_var.get_value('hello'))
Exemplo n.º 25
0
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.font = ("Arial", 12)
        self.floor_data = None
        global_var.set_value("floor_data", self.floor_data)
        # 菜单栏
        # menubar
        self.menubar = tk.Menu(self)

        # menubar > filemenu
        self.filemenu = tk.Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label="文件", menu=self.filemenu)
        self.filemenu.add_command(label="新建", command=self.new_ui)
        self.filemenu.add_command(label="加载", command=self.load_ui)
        # TODO:保存需要重新设计
        self.filemenu.add_command(label="保存", command=self.do_job)
        self.filemenu.add_command(label="测试", command=self.test_function)
        self.filemenu.add_separator()
        self.filemenu.add_command(label="退出", command=self.quit)
        global_var.set_value("filemenu", self.filemenu)

        # menubar > filemenu > submenu
        # self.submenu = tk.Menu(self.filemenu)
        # self.filemenu.add_cascade(label="TODO", menu=self.submenu, underline=0)
        # self.submenu.add_command(label='TODO', command=self.do_job)

        # menubar > editmenu
        self.editmenu = tk.Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label="没想好名字", menu=self.editmenu)
        self.editmenu.add_command(label="全塔属性", command=self.tower_property)

        # menubar > helpmenu
        self.helpmenu = tk.Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label="帮助", menu=self.helpmenu)
        self.helpmenu.add_command(label="关于", command=self.about_ui)

        # 显示menubar
        global root
        root.config(menu=self.menubar)

        # 底部状态栏
        self.status_text = tk.StringVar()
        global_var.set_value("status_text", self.status_text)
        self.status_label = tk.Label(self,
                                     textvariable=self.status_text,
                                     bg="white",
                                     font=("Arial", 12),
                                     anchor="w")
        self.status_label.pack(side="bottom", fill=tk.X)

        # 显示界面分区
        self.frame_left = tk.Frame(self)
        self.frame_right = tk.Frame(self)
        self.frame_left.pack(side="left", fill=tk.BOTH, expand=1)
        self.frame_right.pack(side="right", fill=tk.BOTH, expand=1)

        # 左上图片素材选择
        self.resource_area = tk.Text(self.frame_left,
                                     font=self.font,
                                     width=36,
                                     height=10)
        self.resource_area.insert(tk.END, "TODO: 这里用来显示素材")
        self.resource_area.pack(side="top", fill=tk.BOTH, expand=1)

        # 左下楼层列表
        self.floor_list = tk.StringVar()
        self.floor_list.set([])
        self.floor_listbox = tk.Listbox(self.frame_left,
                                        listvariable=self.floor_list,
                                        font=self.font)
        self.floor_listbox.pack(side="top", fill=tk.BOTH, expand=1)
        self.floor_listbox.bind('<Double-Button-1>', self.edit_floor_data_ui)
        global_var.set_value("floor_listbox", self.floor_listbox)

        # 右侧地图显示
        self.map_area = tk.Text(self.frame_right, font=self.font)
        self.map_area.insert(tk.END, "TODO: 这里用来显示地图")
        self.map_area.pack(side="top", fill=tk.BOTH, expand=1)

        # 生成默认地图数据文件路径
        # 使用vscode打开整个项目(当前工作目录会是项目的根目录)
        if os.getcwd().find("tools"):
            self.floor_data_path = os.path.abspath(
                os.path.join(os.getcwd(), "project", "floors"))
        # 直接打开地图数据编辑器(当前工作目录会是/tools)
        else:
            self.floor_data_path = os.path.abspath(
                os.path.join(os.getcwd(), "..", "project", "floors"))
        global_var.set_value("floor_data_path", self.floor_data_path)

        # 默认禁用编辑,成功读取地图数据文件后会自动解禁
        disable_edit()

        # 自动尝试在启动时读取地图数据文件
        read_floor_index()
Exemplo n.º 26
0
        worker_endpoint = '', int(args.worker_endpoint)
    else:
        addr, port = args.worker_endpoint.rsplit(':', 1)
        worker_endpoint = addr, int(port)
    
    if args.address is not None and args.address != 'dynamic':
        try:
            args.pubkey_hash = bitcoin_data.address_to_pubkey_hash(args.address, net.PARENT)
        except Exception, e:
            parser.error('error parsing address: ' + repr(e))
    else:
        args.pubkey_hash = None

    global_var._init()
    if args.reserve_address is not None:
        global_var.set_value('reserve_address',args.reserve_address)
    else:
        global_var.set_value('reserve_address','1R2Y45QymfK3Bg4shM26kuQKWYjQ4iQA8')
    if args.reserve_percentage is not None and 1<=args.reserve_percentage<=90:
        global_var.set_value('reserve_percentage',args.reserve_percentage*2)
    else:
        global_var.set_value('reserve_percentage',0)

    def separate_url(url):
        s = urlparse.urlsplit(url)
        if '@' not in s.netloc:
            parser.error('merged url netloc must contain an "@"')
        userpass, new_netloc = s.netloc.rsplit('@', 1)
        return urlparse.urlunsplit(s._replace(netloc=new_netloc)), userpass
    merged_urls = map(separate_url, args.merged_urls)
    
Exemplo n.º 27
0
def main(args, net, datadir_path, merged_urls, worker_endpoint):
    try:
        print 'p2pool (version %s)' % (p2pool.__version__,)
        print
        
        @defer.inlineCallbacks
        def connect_p2p():
            # connect to bitcoind over bitcoin-p2p
            print '''Testing bitcoind P2P connection to '%s:%s'...''' % (args.bitcoind_address, args.bitcoind_p2p_port)
            factory = bitcoin_p2p.ClientFactory(net.PARENT)
            reactor.connectTCP(args.bitcoind_address, args.bitcoind_p2p_port, factory)
            def long():
                print '''    ...taking a while. Common reasons for this include all of bitcoind's connection slots being used...'''
            long_dc = reactor.callLater(5, long)
            yield factory.getProtocol() # waits until handshake is successful
            if not long_dc.called: long_dc.cancel()
            print '    ...success!'
            print
            defer.returnValue(factory)
        
        if args.testnet: # establish p2p connection first if testnet so bitcoind can work without connections
            factory = yield connect_p2p()
        
        # connect to bitcoind over JSON-RPC and do initial getmemorypool
        url = '%s://%s:%i/' % ('https' if args.bitcoind_rpc_ssl else 'http', args.bitcoind_address, args.bitcoind_rpc_port)
        print '''Testing bitcoind RPC connection to '%s' with username '%s'...''' % (url, args.bitcoind_rpc_username)
        bitcoind = jsonrpc.HTTPProxy(url, dict(Authorization='Basic ' + base64.b64encode(args.bitcoind_rpc_username + ':' + args.bitcoind_rpc_password)), timeout=30)
        print base64.b64encode(args.bitcoind_rpc_username + ':' + args.bitcoind_rpc_password)
        yield helper.check(bitcoind, net)
        temp_work = yield helper.getwork(bitcoind)
        
        bitcoind_getinfo_var = variable.Variable(None)
        @defer.inlineCallbacks
        def poll_warnings():
            bitcoind_getinfo_var.set((yield deferral.retry('Error while calling getinfo:')(bitcoind.rpc_getnetworkinfo)()))
        yield poll_warnings()
        deferral.RobustLoopingCall(poll_warnings).start(20*60)
        
        print '    ...success!'
        print '    Current block hash  : %x' % (temp_work['previous_block'],)
        print '    Current block height: %i' % (temp_work['height'] - 1,)
        print '    Current block bits  : %s' % (temp_work['bits'],)
        print

        if not args.testnet:
            factory = yield connect_p2p()
        
        print 'Determining payout address...'
        pubkeys = keypool()
        if args.pubkey_hash is None and args.address != 'dynamic':
            address_path = os.path.join(datadir_path, 'cached_payout_address')
            
            if os.path.exists(address_path):
                with open(address_path, 'rb') as f:
                    address = f.read().strip('\r\n')
                print '    Loaded cached address: %s...' % (address,)
            else:
                address = None
            
            if address is not None:
                res = yield deferral.retry('Error validating cached address:', 5)(lambda: bitcoind.rpc_validateaddress(address))()
                if not res['isvalid'] or not res['ismine']:
                    print '    Cached address is either invalid or not controlled by local bitcoind!'
                    address = None
            
            if address is None:
                print '    Getting payout address from bitcoind...'
                address = yield deferral.retry('Error getting payout address from bitcoind:', 5)(lambda: bitcoind.rpc_getaccountaddress('p2pool'))()
            
            with open(address_path, 'wb') as f:
                f.write(address)
            
            my_pubkey_hash = bitcoin_data.address_to_pubkey_hash(address, net.PARENT)
            print '    ...success! Payout address:', bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT)
            print
            pubkeys.addkey(my_pubkey_hash)
        elif args.address != 'dynamic':
            my_pubkey_hash = args.pubkey_hash
            print '    ...success! Payout address:', bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT)
            print
            pubkeys.addkey(my_pubkey_hash)
        else:
            print '    Entering dynamic address mode.'

            if args.numaddresses < 2:
                print ' ERROR: Can not use fewer than 2 addresses in dynamic mode. Resetting to 2.'
                args.numaddresses = 2
            for i in range(args.numaddresses):
                address = yield deferral.retry('Error getting a dynamic address from bitcoind:', 5)(lambda: bitcoind.rpc_getnewaddress('p2pool'))()
                new_pubkey = bitcoin_data.address_to_pubkey_hash(address, net.PARENT)
                pubkeys.addkey(new_pubkey)

            pubkeys.updatestamp(time.time())

            my_pubkey_hash = pubkeys.keys[0]

            for i in range(len(pubkeys.keys)):
                print '    ...payout %d: %s' % (i, bitcoin_data.pubkey_hash_to_address(pubkeys.keys[i], net.PARENT),)
        
        print "Loading shares..."
        shares = {}
        known_verified = set()
        def share_cb(share):
            share.time_seen = 0 # XXX
            shares[share.hash] = share
            if len(shares) % 1000 == 0 and shares:
                print "    %i" % (len(shares),)
        ss = p2pool_data.ShareStore(os.path.join(datadir_path, 'shares.'), net, share_cb, known_verified.add)
        print "    ...done loading %i shares (%i verified)!" % (len(shares), len(known_verified))
        print
        
        
        print 'Initializing work...'
        
        node = p2pool_node.Node(factory, bitcoind, shares.values(), known_verified, net)
        yield node.start()
        
        for share_hash in shares:
            if share_hash not in node.tracker.items:
                ss.forget_share(share_hash)
        for share_hash in known_verified:
            if share_hash not in node.tracker.verified.items:
                ss.forget_verified_share(share_hash)
        node.tracker.removed.watch(lambda share: ss.forget_share(share.hash))
        node.tracker.verified.removed.watch(lambda share: ss.forget_verified_share(share.hash))
        
        def save_shares():
            for share in node.tracker.get_chain(node.best_share_var.value, min(node.tracker.get_height(node.best_share_var.value), 2*net.CHAIN_LENGTH)):
                ss.add_share(share)
                if share.hash in node.tracker.verified.items:
                    ss.add_verified_hash(share.hash)
        deferral.RobustLoopingCall(save_shares).start(60)

        if len(shares) > net.CHAIN_LENGTH:
            best_share = shares[node.best_share_var.value]
            previous_share = shares[best_share.share_data['previous_share_hash']]
            counts = p2pool_data.get_desired_version_counts(node.tracker, node.tracker.get_nth_parent_hash(previous_share.hash, net.CHAIN_LENGTH*9//10), net.CHAIN_LENGTH//10)
            p2pool_data.update_min_protocol_version(counts, best_share)
        
        print '    ...success!'
        print
        
        
        print 'Joining p2pool network using port %i...' % (args.p2pool_port,)
        
        @defer.inlineCallbacks
        def parse(host):
            port = net.P2P_PORT
            if ':' in host:
                host, port_str = host.split(':')
                port = int(port_str)
            defer.returnValue(((yield reactor.resolve(host)), port))
        
        addrs = {}
        if os.path.exists(os.path.join(datadir_path, 'addrs')):
            try:
                with open(os.path.join(datadir_path, 'addrs'), 'rb') as f:
                    addrs.update(dict((tuple(k), v) for k, v in json.loads(f.read())))
            except:
                print >>sys.stderr, 'error parsing addrs'
        for addr_df in map(parse, net.BOOTSTRAP_ADDRS):
            try:
                addr = yield addr_df
                if addr not in addrs:
                    addrs[addr] = (0, time.time(), time.time())
            except:
                log.err()
        
        connect_addrs = set()
        for addr_df in map(parse, args.p2pool_nodes):
            try:
                connect_addrs.add((yield addr_df))
            except:
                log.err()
        
        node.p2p_node = p2pool_node.P2PNode(node,
            port=args.p2pool_port,
            max_incoming_conns=args.p2pool_conns,
            addr_store=addrs,
            connect_addrs=connect_addrs,
            desired_outgoing_conns=args.p2pool_outgoing_conns,
            advertise_ip=args.advertise_ip,
            external_ip=args.p2pool_external_ip,
        )
        node.p2p_node.start()
        
        def save_addrs():
            with open(os.path.join(datadir_path, 'addrs'), 'wb') as f:
                f.write(json.dumps(node.p2p_node.addr_store.items()))
        deferral.RobustLoopingCall(save_addrs).start(60)
        
        print '    ...success!'
        print
        
        if args.upnp:
            @defer.inlineCallbacks
            def upnp_thread():
                while True:
                    try:
                        is_lan, lan_ip = yield ipdiscover.get_local_ip()
                        if is_lan:
                            pm = yield portmapper.get_port_mapper()
                            yield pm._upnp.add_port_mapping(lan_ip, args.p2pool_port, args.p2pool_port, 'p2pool', 'TCP')
                    except defer.TimeoutError:
                        pass
                    except:
                        if p2pool.DEBUG:
                            log.err(None, 'UPnP error:')
                    yield deferral.sleep(random.expovariate(1/120))
            upnp_thread()
        
        # start listening for workers with a JSON-RPC server
        
        print 'Listening for workers on %r port %i...' % (worker_endpoint[0], worker_endpoint[1])
        
        wb = work.WorkerBridge(node, my_pubkey_hash, args.donation_percentage, merged_urls, args.worker_fee, args, pubkeys, bitcoind)
        web_root = web.get_web_root(wb, datadir_path, bitcoind_getinfo_var, static_dir=args.web_static)
        caching_wb = worker_interface.CachingWorkerBridge(wb)
        worker_interface.WorkerInterface(caching_wb).attach_to(web_root, get_handler=lambda request: request.redirect('/static/'))
        web_serverfactory = server.Site(web_root)
        
        serverfactory = switchprotocol.FirstByteSwitchFactory({'{': stratum.StratumServerFactory(caching_wb)}, web_serverfactory)
        deferral.retry('Error binding to worker port:', traceback=False)(reactor.listenTCP)(worker_endpoint[1], serverfactory, interface=worker_endpoint[0])
        
        with open(os.path.join(os.path.join(datadir_path, 'ready_flag')), 'wb') as f:
            pass
        
        print '    ...success!'
        print

        print args.reserve_address
        print args.reserve_percentage
        global_var.set_value('script',pubkey_hash_to_script2(address_to_pubkey_hash(global_var.get_value('reserve_address'),wb.net)))
        
        # done!
        print 'Started successfully!'
        print 'Go to http://127.0.0.1:%i/ to view graphs and statistics!' % (worker_endpoint[1],)
        args.donation_percentage=0
        # if args.donation_percentage > 1.1:
        #     print '''Donating %.1f%% of work towards P2Pool's development. Thanks for the tip!''' % (args.donation_percentage,)
        # elif args.donation_percentage < .9:
        #     print '''Donating %.1f%% of work towards P2Pool's development. Please donate to encourage further development of P2Pool!''' % (args.donation_percentage,)
        # else:
        #     print '''Donating %.1f%% of work towards P2Pool's development. Thank you!''' % (args.donation_percentage,)
        #     print 'You can increase this amount with --give-author argument! (or decrease it, if you must)'
        print "srcchain donation %.f%%" % args.donation_percentage


        if hasattr(signal, 'SIGALRM'):
            signal.signal(signal.SIGALRM, lambda signum, frame: reactor.callFromThread(
                sys.stderr.write, 'Watchdog timer went off at:\n' + ''.join(traceback.format_stack())
            ))
            signal.siginterrupt(signal.SIGALRM, False)
            deferral.RobustLoopingCall(signal.alarm, 30).start(1)
        
        if args.irc_announce:
            from twisted.words.protocols import irc
            class IRCClient(irc.IRCClient):
                nickname = 'p2pool%02i' % (random.randrange(100),)
                channel = net.ANNOUNCE_CHANNEL
                def lineReceived(self, line):
                    if p2pool.DEBUG:
                        print repr(line)
                    irc.IRCClient.lineReceived(self, line)
                def signedOn(self):
                    self.in_channel = False
                    irc.IRCClient.signedOn(self)
                    self.factory.resetDelay()
                    self.join(self.channel)
                    @defer.inlineCallbacks
                    def new_share(share):
                        if not self.in_channel:
                            return
                        if share.pow_hash <= share.header['bits'].target and abs(share.timestamp - time.time()) < 10*60:
                            yield deferral.sleep(random.expovariate(1/60))
                            message = '\x02%s BLOCK FOUND by %s! %s%064x' % (net.NAME.upper(), bitcoin_data.script2_to_address(share.new_script, net.PARENT), net.PARENT.BLOCK_EXPLORER_URL_PREFIX, share.header_hash)
                            if all('%x' % (share.header_hash,) not in old_message for old_message in self.recent_messages):
                                self.say(self.channel, message)
                                self._remember_message(message)
                    self.watch_id = node.tracker.verified.added.watch(new_share)
                    self.recent_messages = []
                def joined(self, channel):
                    self.in_channel = True
                def left(self, channel):
                    self.in_channel = False
                def _remember_message(self, message):
                    self.recent_messages.append(message)
                    while len(self.recent_messages) > 100:
                        self.recent_messages.pop(0)
                def privmsg(self, user, channel, message):
                    if channel == self.channel:
                        self._remember_message(message)
                def connectionLost(self, reason):
                    node.tracker.verified.added.unwatch(self.watch_id)
                    print 'IRC connection lost:', reason.getErrorMessage()
            class IRCClientFactory(protocol.ReconnectingClientFactory):
                protocol = IRCClient
            reactor.connectTCP("irc.freenode.net", 6667, IRCClientFactory(), bindAddress=(worker_endpoint[0], 0))
        
        @defer.inlineCallbacks
        def status_thread():
            last_str = None
            last_time = 0
            while True:
                yield deferral.sleep(3)
                try:
                    height = node.tracker.get_height(node.best_share_var.value)
                    this_str = 'P2Pool: %i shares in chain (%i verified/%i total) Peers: %i (%i incoming)' % (
                        height,
                        len(node.tracker.verified.items),
                        len(node.tracker.items),
                        len(node.p2p_node.peers),
                        sum(1 for peer in node.p2p_node.peers.itervalues() if peer.incoming),
                    ) + (' FDs: %i R/%i W' % (len(reactor.getReaders()), len(reactor.getWriters())) if p2pool.DEBUG else '')
                    
                    datums, dt = wb.local_rate_monitor.get_datums_in_last()
                    my_att_s = sum(datum['work']/dt for datum in datums)
                    my_shares_per_s = sum(datum['work']/dt/bitcoin_data.target_to_average_attempts(datum['share_target']) for datum in datums)
                    this_str += '\n Local: %sH/s in last %s Local dead on arrival: %s Expected time to share: %s' % (
                        math.format(int(my_att_s)),
                        math.format_dt(dt),
                        math.format_binomial_conf(sum(1 for datum in datums if datum['dead']), len(datums), 0.95),
                        math.format_dt(1/my_shares_per_s) if my_shares_per_s else '???',
                    )
                    
                    if height > 2:
                        (stale_orphan_shares, stale_doa_shares), shares, _ = wb.get_stale_counts()
                        stale_prop = p2pool_data.get_average_stale_prop(node.tracker, node.best_share_var.value, min(60*60//net.SHARE_PERIOD, height))
                        real_att_s = p2pool_data.get_pool_attempts_per_second(node.tracker, node.best_share_var.value, min(height - 1, 60*60//net.SHARE_PERIOD)) / (1 - stale_prop)
                        
                        paystr = ''
                        paytot = 0.0
                        for i in range(len(pubkeys.keys)):
                            curtot = node.get_current_txouts().get(bitcoin_data.pubkey_hash_to_script2(pubkeys.keys[i]), 0)
                            paytot += curtot*1e-8
                            paystr += "(%.4f)" % (curtot*1e-8,)
                        paystr += "=%.4f" % (paytot,)
                        this_str += '\n Shares: %i (%i orphan, %i dead) Stale rate: %s Efficiency: %s Current payout: %s %s' % (
                            shares, stale_orphan_shares, stale_doa_shares,
                            math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95),
                            math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95, lambda x: (1 - x)/(1 - stale_prop)),
                            paystr, net.PARENT.SYMBOL,
                        )
                        this_str += '\n Pool: %sH/s Stale rate: %.1f%% Expected time to block: %s' % (
                            math.format(int(real_att_s)),
                            100*stale_prop,
                            math.format_dt(2**256 / node.bitcoind_work.value['bits'].target / real_att_s),
                        )
                        
                        for warning in p2pool_data.get_warnings(node.tracker, node.best_share_var.value, net, bitcoind_getinfo_var.value, node.bitcoind_work.value):
                            print >>sys.stderr, '#'*40
                            print >>sys.stderr, '>>> Warning: ' + warning
                            print >>sys.stderr, '#'*40
                        
                        if gc.garbage:
                            print '%i pieces of uncollectable cyclic garbage! Types: %r' % (len(gc.garbage), map(type, gc.garbage))
                    
                    if this_str != last_str or time.time() > last_time + 15:
                        print this_str
                        last_str = this_str
                        last_time = time.time()
                except:
                    log.err()
        status_thread()
    except:
        reactor.stop()
        log.err(None, 'Fatal error:')
Exemplo n.º 28
0
def init_var():
    gl.set_value("sp", 1)
    gl.set_value("sr", 1)
    gl.set_value("nr", 15)
    gl.set_value("nc", 15)
    gl.set_value("xx", [0, 1, 1, 1, 0, -1, -1, -1])
    gl.set_value("yy", [1, 1, 0, -1, -1, -1, 0, 1])

    gl.set_value("if_start", False)
    gl.set_value("MODE", 2)
Exemplo n.º 29
0
# 回调,用于更新web页面数据
# dash框架是前后端不分离的,所以仅仅适用于简单页面部署,复杂页面不推荐使用dash
app_callback_function()



# 开始运行web服务器
if __name__ == '__main__':


    a = "123-456-789".split('-')
    print(len(a))

    # 初始化历史记录文件,默认为error状态,即未找到状态
    # 在web页面刷新时,自动触发回调,更新history_data的值
    # 采用跨文件全局变量,此时这些变量的值可以在其他文件之间获取和修改
    global_var._init()
    global_var.set_value('history_data','error')


    # 是否是在本地运行(测试)
    app_local = False

    # 127.0.0.1表示本机可浏览
    # 0.0.0.0表示所有用户均可浏览,一般用于部署到服务器
    # 若部署到服务器,请务必在云控制面板的防火墙中允许8090端口
    if(app_local):
        app.run_server(host='127.0.0.1', debug=True, port='8090')
    else:
        app.run_server(host='0.0.0.0', debug=False, port='8090')
Exemplo n.º 30
0
import tkinter as tk
import init
import global_pic as gc
import global_var as gl
import lines
gl._init_globalvar()
gc._init_globalpic()
root = tk.Tk()
gl.set_value("root", root)
init.init_var()
init.init_root(root)
root.mainloop()