Ejemplo n.º 1
0
def Loads():
    try:
        global g_Account
        f = open(os.path.join(os.getcwd(), "account.data"), "rb")
        jsondata = f.read()
        f.close()
        g_Account = json.loads(jsondata)
        logger.Info("data read success.")
    except:
        logger.Info("init database")
        Dumps()
Ejemplo n.º 2
0
def on_connect(client: object, userdata: object, flags, respons_code: int):
    """Connection event handler

    Arguments:
        client {object} -- mqtt clinet
        userdata {object} -- unknown
        flags {[type]} -- unknown
        respons_code {int} -- status of connection
    """
    print('status {0}'.format(respons_code))
    log.Info('status {0}'.format(respons_code))
    client.subscribe(TOPIC)
    log.Info("start to subscribe: " + TOPIC)
Ejemplo n.º 3
0
 def Disconnected(self, sReason, bForceQuit=False):
     if not bForceQuit:
         self.WaitReconnect()
     else:
         logger.Info("real disconnect %s, r=%s, force=%s" %
                     (self.m_ID, sReason, bForceQuit))
         self.OnDisconnected()
         service.GetService('PlayerManager').DelPlayer(self.m_ID, sReason)
Ejemplo n.º 4
0
 def WaitReconnect(self):
     if self.m_OfflineTime:
         return
     logger.Info("wait disconnect %s" % (self.m_ID))
     timer.Unschedule(self.m_WaitConnectFlag)
     timer.Schedule(CFunction(CheckOffline, self.m_ID), 30000,
                    self.m_WaitConnectFlag)
     self.m_OfflineTime = int(time.time())
Ejemplo n.º 5
0
def Dumps():
    if not g_Account:
        return
    jsondata = json.dumps(g_Account)
    f = open(os.path.join(os.getcwd(), "account.data"), "wb")
    f.write(jsondata.encode("utf-8"))
    f.close()
    logger.Info("data write success.")
Ejemplo n.º 6
0
    def Listen(self, iPort, sAddress = "127.0.0.1"):
        logger.Info("Server listen port %s"%(iPort))
        self.m_Status = S_LISTEN
        self.m_Server = tcpserver.CTcpServer(sAddress, iPort, "client")

        # 注册两个回调函数,一个是有新链接进来时回调
        # 另外一个是已经连上的有数据可读
        self.m_Server.On("OnConnected", self.OnConnected)
        self.m_Server.On("OnDisconnected", self.OnDisconnected)
        self.m_Server.On("OnReadyRead", self.OnReadyRead)
Ejemplo n.º 7
0
    def Disconnect(self, sReason):
        timer.Unschedule(self.m_ConnectedFlag)
        logger.Info("%s disconnect r=%s" % (self.m_ID, sReason))
        oMgrServer = service.GetService("ServerManager")
        oTcpServer = oMgrServer.Get("client")
        oTcpServer.Disconnect(self.m_SocketID)

        oLinkMgr = service.GetService("LinkManager")
        oLinkMgr.DelLink(self.m_ID)

        oPlayerMgr = service.GetService('PlayerManager')
        oPlayerMgr.Disconnected(self.m_ProxyID, sReason)
Ejemplo n.º 8
0
def on_message(client: object, userdata: object, msg: str) -> None:
    """Message recieve event handler

    Arguments:
        client {object} -- mqtt clinet
        userdata {object} -- unknown
        msg {str} -- recieved message
    """
    try:
        data = json.loads(msg.payload.decode("utf-8"))["data"]
        log.Info(data)
        if type(data) is str:
            # データが文字列で渡されてるので、そこだけ再度、オブジェクト化
            data = json.loads(data)

        else:
            data = data[0]

        data = {key: value.strip() for key, value in data.items()}
        action = data[REQ_TYPE]

        if BUCKET_NAME in data:
            bucket_name = data[BUCKET_NAME]
        else:
            bucket_name = None

        log.Info("aciton='{0}', bucket_name='{1}'".format(action, bucket_name))
        if action == "take_photo":
            file_name = "tmp.jpg"
            take_photo(file_name)
            if os.path.exists(file_name):
                upload_img_to_s3(file_name, bucket_name)
                log.Info("finish process for a take_req")
            else:
                log.Error("failed to take photo")
        else:
            log.Warn(data)
    except Exception:
        traceback.print_exc()
Ejemplo n.º 9
0
    def __init__(self, argv):
        logger.Init()
        database.Init()
        service.Init()

        self.m_Status = S_NOTRUN
        self.m_Server = None
        self.m_EntryFunc = None

        logger.Info("Server Application Init")

        # 处理下退出的消息
        signal.signal(signal.SIGINT, self.OnSignal) # 2
        signal.signal(signal.SIGQUIT, self.OnSignal) # 3
Ejemplo n.º 10
0
def take_photo(file_name: str) -> None:
    """take a photo with picamera

    Arguments:
        file_name {str} -- file name of taked photo
    """
    camera = None
    try:
        camera = picamera.PiCamera()
        camera.capture(file_name)
        log.Info(file_name)
    except Exception:
        log.Error("Failed to take a photo")
    finally:
        if not (camera is None):
            camera.close()
Ejemplo n.º 11
0
def upload_img_to_s3(file_name: str, bucket_name: str = None) -> None:
    """send image to amazon S3

    Arguments:
        file_name {str} -- uploaded file name
        bucket_name {str} -- upload to this cuket

    Returns:
        None -- return value is nothing
    """
    if not (bucket_name is None):
        send_command = SEND_COMMAND_TEMPLATE.format(file_name, bucket_name,
                                                    PROFILE_NAME)
    else:
        send_command = SEND_COMMAND_TEMPLATE.format(file_name, DEFAULT_BUCKET,
                                                    PROFILE_NAME)
    log.Info(send_command)
    subprocess.call(send_command, shell=True)
    return
Ejemplo n.º 12
0
    def Exec(self):
        self.m_Server.Listen()
        
        while S_LISTEN == self.m_Status:
            # 处理定时器超时
            try:
                timer.Frame()
            except Exception as e:
                traceback.print_exc()
            # 处理网络部分
            try:
                self.m_Server.Frame()
            except Exception as e:
                traceback.print_exc()

            timer.MillisecondSleep(1)

        logger.Info("进程退出")
        self.m_Server.Exit()
Ejemplo n.º 13
0
def ConnectTimeout(iLinkID):
    timer.Unschedule("Connected_%s" % (iLinkID))
    logger.Info("connect timeout %s" % (iLinkID))
    oLinkMgr = service.GetService("LinkManager")
    oLinkObject = oLinkMgr.GetLink(iLinkID)
    oLinkObject.Disconnect("timeout")
Ejemplo n.º 14
0
 def DelPlayer(self, uid, sReason):
     logger.Info("del player %s, r=%s" % (uid, sReason))
     if not uid in self.m_Players:
         return
     del self.m_Players[uid]
Ejemplo n.º 15
0
 def Exit(self):
     self.Close()
     logger.Info("关闭网络服务")
Ejemplo n.º 16
0
 def OnConnected(self, oMsg):
     logger.Info("OnConnected")
     login.OnConnected(oMsg.m_SocketID)
Ejemplo n.º 17
0
def NetworkThread(oTcpServer):
    epoll = oTcpServer.m_Epoll
    oSocket = oTcpServer.m_ServerSocket
    container = oTcpServer.m_Sockets

    while oTcpServer.IsRunning():
        try:
            # 处理需要退出的socket
            while not oTcpServer.m_QuitQueue.empty():
                iSocketID = oTcpServer.m_QuitQueue.get()
                if not iSocketID in oTcpServer.m_SocketID2FD:
                    continue
                fd = oTcpServer.m_SocketID2FD[iSocketID]
                if fd in container:
                    oTcpSocket = container[fd]
                    epoll.unregister(fd)
                    oTcpSocket.m_Socket.close()
                    del container[fd]
                    del oTcpServer.m_SocketID2FD[oTcpSocket.m_ID]

            epoll_list = epoll.poll(0.1)
            # epoll 进行 fd 扫描的地方 扫描出能满足条件的套接字,添加进列表中
            for fd, events in epoll_list:
                #对epoll列表中的文件描述符、事件进行扫描
                if fd == oSocket.fileno():
                    oTcpServer.m_SocketID += 1
                    #表示有客户端连接了服务器套接字
                    conn, addr = oSocket.accept()
                    oTcpSocket = tcpsocket.CTcpSocket(oTcpServer.m_SocketID,
                                                      conn, addr)

                    logger.Info(
                        'there has been a new cilent form [%s] %s %s %s' %
                        (str(addr), oTcpSocket.m_ID, fd, conn.fileno()))

                    container[conn.fileno()] = oTcpSocket
                    oTcpServer.m_SocketID2FD[oTcpSocket.m_ID] = conn.fileno()
                    epoll.register(conn.fileno(),
                                   select.EPOLLIN | select.EPOLLET)

                    oMsg = CNetWorkMessage(MSG_NEW, oTcpSocket.m_ID)
                    oTcpServer.PushMessage(oMsg)

                elif events == select.EPOLLIN:
                    #表示可以收取信息
                    oTcpSocket = container[fd]
                    oClientSocket = oTcpSocket.m_Socket
                    recvData = oClientSocket.recv(1024)

                    if len(recvData) > 0:
                        #logger.Info('massage from [%s] is %s'%(str(addr), str(recvData)))
                        oMsg = CNetWorkMessage(MSG_READ,
                                               oTcpSocket.m_ID,
                                               Data=recvData)
                        oTcpServer.PushMessage(oMsg)
                    else:
                        logger.Info('client[%s] was closed' % str(addr))
                        epoll.unregister(fd)
                        oTcpSocket = container[fd]
                        oTcpSocket.m_Socket.close()
                        del container[fd]
                        del oTcpServer.m_SocketID2FD[oTcpSocket.m_ID]

                        oMsg = CNetWorkMessage(MSG_CLOSE, oTcpSocket.m_ID)
                        oTcpServer.PushMessage(oMsg)
        except Exception as e:
            traceback.print_exc()
Ejemplo n.º 18
0
 def ConnectedFinish(self):
     logger.Info("%s Connected finish" % (self.m_ID))
     timer.Unschedule(self.m_ConnectedFlag)
     self.Heartbeat()
     self.StartCheckHeartbeat()
Ejemplo n.º 19
0
g_Data = bytes()
g_Exit = False


def NetworkThread():
    global g_Data, g_Exit
    while True:
        recvdata = s.recv(1024)
        if not recvdata:
            return
        g_Data += recvdata
        print(type(recvdata), recvdata)
        data, pkglist = GetRecvPackage(g_Data)
        if not pkglist:
            continue
        g_Data = data
        print(pkglist)
        for pkgdata in pkglist:
            entry.OnEntry(s, pkgdata)
    g_Exit = True


t = threading.Thread(target=NetworkThread, args=())
t.start()
while not g_Exit:
    timer.Frame()
    timer.MillisecondSleep(1)

s.close()
logger.Info("Exit! Bye!~")