python–DenyHttp项目(2)–ACM监考客户端测试版(1阶段客户端计算)葡京签到送彩金

产品名称:有鱼悦动

  客户端: 

产品简介:有鱼悦动,一个专为婚庆行业所研发的网络+婚礼互动神器。

葡京签到送彩金,1.既然脚本是令人家用的,怎么说也得有个界面,(固然很low)

作为深耕婚庆行业的平台,其中包括的意义与婚礼现场贴合度极高,适用于各样大旨场景。互动环节牢牢,使婚礼持续,欢笑不断。

'''
DenyManager.py
调用客户端与客户端界面
'''
from DenyClient import *
from DenyGui import *

if __name__ == '__main__':
    clientConncet = DenyHttpClient()
    clientGui = DenyHttpGui()     

当您进来婚礼会场,拿起手机扫扫就可轻松签到;

2.客户端的界面很不难,签到还没写,(构思中…)其实能用的就一个比赛起始的Button

给新人送祝福,送礼物,甚至当场发红包闹婚礼,也会在现场大显示屏上看得到;

葡京签到送彩金 1

婚礼现场,手机+现场大显示屏双屏互动高潮不断,全场婚礼嗨到爆;

那是后台跑的多少

让新人在婚礼上有面子,亲朋好友也玩得开怀;

葡京签到送彩金 2

这就是“有鱼悦动”利用手机+现场大屏幕,营造的全新婚礼现场互动平台。

葡京签到送彩金 3

对此这一个互连网+的婚礼新宠儿—有鱼悦动,大家尤其找了她们的祖师爷陈君毅来聊天,看看那样一个互相神器是何许暴发的。

其三番五次续服务器的messageBox为了改变比赛开头Button的处境为不可点击

碰咖APP对话“有鱼悦动”创始人:陈君毅

葡京签到送彩金 4

作者:“有鱼悦动”作为一款新产品,为什么一出场就改成婚庆市场的新宠儿?

检查版本新闻,在规定早先竞赛之前检查版本音讯,版本不对,更新吧(下个新版的就好了)

陈君毅:一方面大家“有鱼悦动”主打的是“免费、新潮、易用”,对于盼望进步婚礼档次,简化婚礼流程的婚庆公司来说,具有很强的吸动力。

葡京签到送彩金 5

而大家生产的祝福墙、送礼物、摇爱心、趣味投票等职能,在为婚庆集团提供更加多新奇玩法的同时,又能让新人对婚庆公司的劳务质量感到满足,从而成为婚庆集团机密的推广者,一语双关。

其后,起初竞技!

而单方面,“有鱼悦动”能为婚庆集团的斯Leica号引入大批量新的粉丝,方便婚庆集团挖掘潜在客户,扩大品牌影响力。

葡京签到送彩金 6

作者:为啥您会做“有鱼悦动”那样一款婚礼互动产品?

#coding=utf-8
'''
DenyGui.py
客户端的界面
1.倒计时lable
2.签到Button(未实现)
3.开始比赛Button
'''
import tkinter as tk
import random
import time
import datetime
import sys
import os
''' 用messagebox没有下面这句,报错'''
from tkinter import messagebox#专门加上
from DenyClient import *
from CountTime import *
from tkinter.constants import *
import threading

class DenyHttpGui(object):

    def __init__(self):
        '''创建一个实例对象,进行倒计时'''
        self.changetime = ChangeTime()
        '''定义窗口'''
        self.root = tk.Tk()
        '''标题'''
        self.root.title('404监考系统')
        '''大小'''
        self.curWidth = 300 
        self.curHeight = 100
        '''位置'''
        scnWidth,scnHeight = self.root.maxsize() 
        tmpcnf = '%dx%d+%d+%d'%(self.curWidth,self.curHeight,
                                (scnWidth-self.curWidth)/2,(scnHeight-self.curHeight)/2)
        self.root.geometry(tmpcnf)
        self.root.resizable(False, False)
        '''倒计时Frame'''
        self.frameTop = tk.Frame(self.root,height=45,width=300)
        '''Button Frame'''
        self.frameBottom = tk.Frame(self.root,height=55,width=300)
        '''把Button顶上去'''
        self.frameDemo = tk.Frame(self.root,height=10)

        self.frameTop.pack(side=tk.TOP)
        self.frameBottom.pack(side=tk.TOP)
        self.frameDemo.pack(side=tk.TOP)
        '''定义倒计时属性'''
        self.decTimeLable = tk.Label(self.frameTop,text='正在连接服务器...',font=("Arial",20))
        self.decTimeLable.pack(side=tk.TOP)
        '''定义签到Button'''
        tk.Button(self.frameBottom,
               text='签到',
               height=1,width=8,padx=8,pady=8,
               font=("Arial",14),
               command=self.check).pack(side=tk.LEFT)
        '''定义比赛Button'''
        self.BEGIN = tk.Button(self.frameBottom,
                           text='比赛开始',
                           height=1,width=8,padx=8,pady=8,
                           font=("Arial",14),
                           command=self.startButton)
        self.BEGIN.pack(side=tk.RIGHT)
        self.decTimeLable.pack()
        self.root.mainloop()       
    '''开始比赛,启动客户端服务'''        
    def startButton(self):
        self.BEGIN.config(state='disable')
        denyhttpclinet = DenyHttpClient()
        threadQueryTime = threading.Thread(target=denyhttpclinet.queryTime)
        threadQueryTime.start()
        '''下面这句,为了刷新Button状态为不可点击状态'''
        tk.messagebox.showwarning('警告', '正在连接服务器...')
        threadQueryTime.join()
        '''进行版本更新'''
        '''线程之间用returnval传递值'''
        if denyhttpclinet.returnval == 1:
            self.decTimeLable.configure(text='正在检查版本信息...')
            threadCheckTime = threading.Thread(target=denyhttpclinet.checkVersion)
            threadCheckTime.start()
            threadCheckTime.join()

            print(denyhttpclinet.versionRight)
            if denyhttpclinet.versionRight == 1:            
                self.decTimeLable.configure(text='00:00:00')
                tk.messagebox.showwarning('警告', '当前为最新版本!')
            else:
                tk.messagebox.showwarning('警告', '版本更新!\n请联系管理员')
                sys.exit()
            threadContest = threading.Thread(target=denyhttpclinet.startContest)
            threadContest.start()
        elif denyhttpclinet.returnval == 0:
            self.decTimeLable.configure(text='比赛尚未开始!')
        elif denyhttpclinet.returnval == -2:
            self.decTimeLable.configure(text='比赛已经开始!')
        else:
            self.decTimeLable.configure(text='比赛已结束!')
        if denyhttpclinet.endTime !='' and denyhttpclinet.now != '':
            self.totaltime = (denyhttpclinet.endTime - datetime.datetime.strptime(denyhttpclinet.now, "%Y-%m-%d %H:%M:%S")).seconds
            self.changetime = ChangeTime(self.totaltime)
            threadDecTime = threading.Thread(target=self.textadd())
            threadDecTime.start()
    '''改变Button状态'''
    def buttonNormal(self,sleepTime):
        while self.mark:
            if self.mark :
                self.BEGIN.config(state='normal')
            time.sleep(1)
    def check(self):
        tk.messagebox.showwarning('警告', '待更新')
    '''刷新倒计时'''
    def textadd(self):
        t = self.changetime.subTime()
        if t == '00:00:00':
            self.BEGIN.config(state='normal')
            self.decTimeLable.configure(text='比赛结束!')#这个修改lable值
            return
        self.decTimeLable.configure(text='距比赛结束: '+t)
        self.decTimeLable.after(1000, self.textadd)

if __name__=='__main__':
    Demo = DenyHttpGui()
    Demo.startGui()

#coding:gbk
'''
DenyClient.py
客户端与服务器端的操作
1.连接服务器
2.监听端口
3.查询比赛时间
4.监听本地网络连接状态
5.违规报警
'''
from socket import *
import time
import datetime
from ClientOperate import *
import threading
import subprocess
import multiprocessing

class DenyHttpClient():
    def __init__(self):
        '''服务器套接字'''
        self.HOST = '10.251.234.141'
        self.PORT = 1122
        self.ADDR = (self.HOST, self.PORT)
        '''数据包大小'''
        self.BUFSIZE = 1024
        self.now = ''
        '''比赛结束时间'''
        self.endTime = ''
        '''线程之间传值'''
        self.returnval = 0
        '''版本号'''
        self.versionRight = 0
    '''检查版本'''
    def checkVersion(self):
        msg = 'V:0'
        self.listener(msg)
        if self.getdata == '1':
            self.versionRight =  1
        elif self.getdata == '-1':
            self.versionRight =  -1

    '''查询比赛时间,确认连接'''    
    def queryTime(self):
        if os.system('ping ' + self.HOST):
            print('无法连接到目标主机!')
            return 
        self.now = datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")
        msg = 'B:' + str(self.now)
        try:
            if self.listener(msg):
                msg = 'IP:' + gethostbyname(gethostname())
                self.listener(msg)
                self.returnval = 1
                return 1
            elif self.getdata == '-1':
                print('比赛已结束')
                self.returnval = -1
                return -1
            elif self.getdata == '-2':
                self.returnval = -2
                print('比赛已经开始')
                return -2
            else:
                self.returnval = 0
                return 0
        except ConnectionRefusedError:
            self.returnval = 0
            return 0
        except TimeoutError:
            self.returnval = 0
            return 0
    '''开始检测与本地监听'''
    def startContest(self):
        self.t1 = threading.Thread(target=self.contestBegin)#参数是函数对象
        self.t2 = threading.Thread(target=self.contestEnd)
        self.t1.setDaemon(True)
        self.t2.setDaemon(True)
        self.t1.start()
        self.t2.start()
        self.t1.join()
        self.t2.join()  
        return 0
    '''监听端口信息'''
    def listener(self,data):
        self.client = socket(AF_INET,SOCK_STREAM)
        self.client.connect(self.ADDR)

        self.client.send(data.encode('utf-8'))
        print('发送消息给%s: %s' % (self.HOST, data))
        self.getdata = self.client.recv(self.BUFSIZE)
        self.getdata = self.getdata.decode('utf-8')
        print('接受的消息  %s' % (self.getdata))
        if self.getdata == '0' or self.getdata == '-1':
            return False
        elif len(self.getdata) > 2:
            self.endTime = datetime.datetime.strptime(self.getdata, "%Y-%m-%d %H:%M:%S")
            return True

    '''
    在比赛过程中
    1.执行拒绝HTTP操作
    2.不断检测网络是否联通
    '''
    def contestBegin(self):
        Denyfile()
        if not detectnet():
            print('success deny http!')
        else:
            print('failed deny http!')
            return 
        self.begin = 1
        while self.begin:
            if detectnet():
                print('somebody cheating!')
                self.listener('Error: ' + gethostbyname(gethostname()))
            time.sleep(5)

    '''检查是否到比赛时间,每隔 剩余时间二分之一检查一次,比赛结束后,恢复网络'''    
    def contestEnd(self):
        print('检测比赛结束.......')
        while True:
            if self.endTime > datetime.datetime.now():
                sleepTime  = (self.endTime - datetime.datetime.now()).seconds // 2
                if not sleepTime > 5:
                    sleepTime = 2
                time.sleep(sleepTime)
                print('contestEnd: 比赛进行中...')
            else:
                break
        self.begin = 0
        print('contest end!')
        Recoverfile()
        if os.system('ping www.baidu.com') == 1:
            print('contest end but recover failed!!!')
        else:
            print('比赛完美举办!')


if __name__ == '__main__':
    c = DenyHttpClient()
    c.checkVersion()
#     c.startContest()

'''
ClientOperate.py
对文件的复制,恢复,修改处理
'''
#coding:gbk
import os
import sys
from subprocess import *

'''复制Hosts文件,添加禁止访问网址,备份'''
def Denyfile():

    if not os.path.exists('D:\DenyHttp'):
        os.mkdir('D:\DenyHttp')
        os.mkdir(r'D:\DenyHttp\restore')    

    hostsName = 'C:\Windows\System32\drivers\etc\hosts'
    filename = r'D:\DenyHttp\hosts'
    if os.path.exists(r'D:\DenyHttp\hosts') and os.path.exists(r'D:\DenyHttp\restore\hosts'):
        print(filename + '已存在!')
    else:
        print('文件不存在,准备复制:')
        if not os.system(r'copy '+ hostsName +' D:\DenyHttp'):
            print('file remove from ' + hostsName + ' to ' + filename)
        if not os.system(r'copy '+ hostsName + r' D:\DenyHttp\restore'):
            print('file remove from ' + hostsName + ' to D:\DenyHttp\restore')

        L = []
        denyNetAddress = getHTTPList(L)
        '''添加htttp到文件'''
        for s in denyNetAddress:
            os.system('echo ' + s +'>>' + filename)

    '''修改hosts文件'''    
    if not os.system(r'copy D:\DenyHttp\hosts C:\Windows\System32\drivers\etc'):
        print('file hosts has been already discovered!')
'''恢复Hosts文件'''    
def Recoverfile():
    if not os.system(r'copy D:\DenyHttp\restore\hosts C:\Windows\System32\drivers\etc'):
        print('file hosts has been already recovered!')
'''覆盖Hosts文件后,检查是否成功覆盖,成功后将不能访问特定网址'''
def detectnet():
    L = []
    denyNetAddress = getNetList(L)
    mark = 1
    for s in denyNetAddress:
        p = Popen(["ping.exe" , s],
                  stdin=PIPE,stdout=PIPE,stderr=PIPE,
                  shell=True)
        out = p.stdout.read()
        if '127.0.0.1' in str(out):
            mark = 0
    '''mark为假不能访问'''
    if not mark:
        print('can\'t request http')
    else:
        print('can request http')
    return mark
'''初始化目标网址列表'''
def getHTTPList(denyNetAddress = []):
    denyNetAddress.append('127.0.0.1 www.baidu.com')
    denyNetAddress.append('127.0.0.1 www.sogou.com')
    denyNetAddress.append('127.0.0.1 sg.search.yahoo.com')
    denyNetAddress.append('127.0.0.1 cn.bing.com')
    denyNetAddress.append('127.0.0.1 www.soso.com')
    denyNetAddress.append('127.0.0.1 www.cnblogs.com')
    denyNetAddress.append('127.0.0.1 blog.csdn.net')

    return denyNetAddress
def getNetList(denyNetAddress = []):
    denyNetAddress.append('www.baidu.com')
    denyNetAddress.append('www.sogou.com')
    denyNetAddress.append('sg.search.yahoo.com')
    denyNetAddress.append('cn.bing.com')
    denyNetAddress.append('www.soso.com')
    denyNetAddress.append('www.cnblogs.com')
    denyNetAddress.append('blog.csdn.net')

    return denyNetAddress
if __name__ == '__main__':
#     Denyfile()
    Recoverfile()
#     print(detectnet())

陈君毅:萌生这一设法,说来也是偶尔。

 

有次参与对象的婚礼,因为亲朋好友实在是多,我们都在门口等着签名,而从入席到婚礼起始那段时日是可怜无聊的。这时就在想能无法让婚礼环节即不难有趣,又能让亲朋好友充裕参与其中呢?于是,便有了做一款针对婚礼现场互动产品的想法。

#coding:utf-8
'''
CountTime.py
将秒转化为时间格式进行倒计时
'''
class ChangeTime():

    def __init__(self,totaltime=0):
        self.sec = totaltime
        self.hour = int(self.sec / 3600)
        self.sec = self.sec % 3600
        self.minute = int(self.sec / 60)
        self.sec = int(self.sec % 60)
    def subTime(self):
        if self.sec > 0:
            self.sec -=  1
        else:
            if self.minute > 0:
                self.minute -= 1
                self.sec = 59
            else:
                if self.hour > 0:
                    self.hour -= 1
                    self.minute = 59
                    self.sec = 59
                else:
                    return '0'
        return str('%02d' % self.hour) + ':' + str('%02d' % self.minute) + ':' + str('%02d' % self.sec)

本来,要做这么一款高频互动的产品,光靠想是极度的。

 

好在,大家事先针对餐饮行业做过一款当场互动产品“有鱼互动”。

 

现今,“有鱼互动”这些产品已覆盖全国31个省份,拥有3000多家协作商户,有诸如此类的实力与经历做支撑,让我们对开发和运营“有鱼悦动”本条产品有丰盛的信心。

小编:为啥说“有鱼悦动”是专为婚礼现场制作的?

陈君毅直言:产品从一初步的初衷到后来的沉思都是围绕婚礼那一个场馆所支付营造。

这一以内,大家约请了多名10年以上的头面婚礼策划人员插足大家的平台设计,产品功用涵盖婚礼现场的各类环节,真正长远到婚礼现场去想效果,做产品,为的就是制作一个即让新人有面子,又让亲朋好友玩得心潮澎湃的美妙婚礼。

作者:作为一款针对婚礼现场地研发的产品,“有鱼悦动”产品作用是怎么样的呢?

陈君毅:针对婚礼现场的种种环节,大家研发了6大职能:

签到墙

扫码即可签到,现场点亮大显示器爱心墙,让婚礼现场协调浪漫。

祝福墙

只需在手机端输入你对新人的祝福,点击即可变身弹幕出现在婚礼的大屏幕,让一条条滚动的祝福,化成婚礼最感人的排场。

送礼物

想为新人送上特其余祝福,还可挑选送上满屏的祝福红包,让华丽的祝福震撼全场。

抢红包

红包漫天飞,让现场气氛眨眼之间间喂到极点,半场参预言爆棚,打造高兴的婚礼气氛

摇爱心

手机摇一摇,点爆爱心,让半场婚礼爱意满满

意思投票

婚礼现场玩什么游戏,可由新人自主设置,由出席宾客投票。既让在座宾客有参预见,又幸免游戏过火所推动的狼狈。

小编:“有鱼悦动”除了提供那几个职能,在技术上是或不是有保险?

陈君毅:为了保障婚礼现场的机能,大家提供了7*18钟头人工售后服务和技术协理,达成一对一当场婚礼跟踪。


随着生活质量与消费水平的增加,相信有愈来愈两人开始追求新潮式的婚礼,传统的婚庆市场与互连网的咬合将会为婚礼带来怎样石破天惊的变动,让大家拭目以待。