コード例 #1
0
    def requestVideoCall(self):
        try:
            reqMsg = Message()
            reqMsg.Body = BodyEmpty()
            reqMsg.Header = Header(None)
            reqMsg.Header.MSGTYPE = message.REQ_VIDEO_STREAMING
            reqMsg.Header.BODYLEN = 0

            # 스트리밍 연결 요청
            MessageUtil.send(self.sockServer, reqMsg)
            # 통화음 또는 연결 화면 보이는 로직 필요

            # 연결 수락 대기
            rspMsg = MessageUtil.receive(self.sockServer)

            if rspMsg.Header.MSGTYPE != message.REP_VIDEO_STREAMING:
                print('Error')
                return False

            # 서버에서 수락하면
            if rspMsg.Body.RESPONSE == message.ACCEPTED:
                return True

            # 서버에서 거절하면
            else:
                return False
        except Exception as err:
            print("Exception")
            print(err)
            return False
コード例 #2
0
    def requestVoice(self):
        try:
            reqMsg = Message()
            reqMsg.Body = BodyEmpty()
            reqMsg.Header = Header(None)
            reqMsg.Header.MSGTYPE = message.REQ_GET_TOKEN
            reqMsg.Header.BODYLEN = 0

            # 토큰 요청
            MessageUtil.send(self.sockServer, reqMsg)

            # 요청 결과
            rspMsg = MessageUtil.receive(self.sockServer)

            if rspMsg.Header.MSGTYPE != message.REP_GET_TOKEN:
                print('Error')
                return False

            # 서버에서 수락하면
            if rspMsg.Body.RESPONSE == message.ACCEPTED:
                print('voice accept')
                # 보이스 전송
                return True
            # 서버에서 거절하면
            else:
                print('voice denied')
                return False
        except Exception as err:
            print("Exception")
            print(err)
            return False
コード例 #3
0
    def connectServer(self):
        self.sockServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:
            ret = -1
            while ret != 0:
                ret = self.sockServer.connect_ex(
                    (self.serverIp, self.serverPort))
                time.sleep(2)

            reqMsg = Message()
            reqMsg.Body = BodyConnectRequest(None)
            reqMsg.Body.RESQUER_ID = '1'
            reqMsg.Header = Header(None)
            reqMsg.Header.MSGTYPE = message.REQ_CONNECT
            reqMsg.Header.BODYLEN = reqMsg.Body.getSize()

            MessageUtil.send(self.sockServer, reqMsg)
            rspMsg = MessageUtil.receive(self.sockServer)

            if rspMsg.Header.MSGTYPE != message.REP_CONNECT:
                print("Error")
                exit(0)
            if rspMsg.Body.RESPONSE != message.ACCEPTED:
                print("Connection is refused.")
                exit(0)

            print("Connected with server")
            return True

        except Exception as err:
            print("Exception")
            print(err)
            return False
コード例 #4
0
    def requestExitVideo(self):
        reqMsg = Message()
        reqMsg.Body = BodyEmpty()
        reqMsg.Header = Header(None)
        reqMsg.Header.MSGTYPE = message.REQ_EXIT_VIDEO_STREAMING
        reqMsg.Header.BODYLEN = 0

        # Ending Video Stream
        MessageUtil.send(self.sockServer, reqMsg)

        # 요청 결과
        rspMsg = MessageUtil.receive(self.sockServer)

        if rspMsg.Header.MSGTYPE != message.REP_EXIT_VIDEO_STREAMING:
            print('Error')
            return False
        print('exit video')
        return True
コード例 #5
0
    def returnToken(self):
        reqMsg = Message()
        reqMsg.Body = BodyEmpty()
        reqMsg.Header = Header(None)
        reqMsg.Header.MSGTYPE = message.REQ_RETURN_TOKEN
        reqMsg.Header.BODYLEN = 0

        print("x")
        # 토큰 반납 요청
        MessageUtil.send(self.sockServer, reqMsg)

        print("y")
        # 요청 결과
        rspMsg = MessageUtil.receive(self.sockServer)

        if rspMsg.Header.MSGTYPE != message.REP_RETURN_TOKEN:
            print('Error')
            return False
        print('return accepted')
        return True
コード例 #6
0
    def handle(self):
        client = self.request
        try:
            while True:
                reqMsg = MessageUtil.receive(client)
                print(reqMsg.Header.MSGTYPE)
                if reqMsg == None:
                    continue
                if reqMsg.Header.MSGTYPE == message.REQ_CALL: 
                    global REMOTE
                    print(self.client_address[0])
                    REMOTE = self.client_address[0]
                    q1.put(0)
                    isAccepted = q2.get()

                    rspMsg = Message()
                    rspMsg.Body = BodyCommonResponse(None)
                    if isAccepted:
                        rspMsg.Body.RESPONSE = message.ACCEPTED
                    else:
                        rspMsg.Body.RESPONSE = message.DENIED

                    rspMsg.Header = Header(None)
                    rspMsg.Header.MSGTYPE = message.REP_CALL
                    print(message.REP_CALL)
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()
                    MessageUtil.send(client, rspMsg)

                    continue

                elif reqMsg.Header.MSGTYPE == message.REQ_CALL_STOP:
                    q3.put(0)
                    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                    sock.connect((REMOTE, 8001))
                    sock.close()
                
                    continue

        except Exception as err:
            print(err)
コード例 #7
0
ファイル: main.py プロジェクト: JinyouKim/rescue
    def handle(self):
        print("클라이언트 접속: {0}".format(self.client_address[0]))

        client = self.request  # client socket

        while True:
            reqMsg = MessageUtil.receive(client)
            if reqMsg == None:
                continue

            if reqMsg.Header.MSGTYPE == message.REQ_CONNECT:  # 전송 요청 처리
                rspMsg = Message()
                rspMsg.Body = BodyCommonResponse(None)
                rspMsg.Body.RESPONSE = message.ACCEPTED

                rspMsg.Header = Header(None)
                rspMsg.Header.MSGTYPE = message.REP_CONNECT
                rspMsg.Header.BODYLEN = rspMsg.Body.getSize()

                MessageUtil.send(client, rspMsg)
                continue

            elif reqMsg.Header.MSGTYPE == message.REQ_GET_TOKEN:  # 음성 토큰 요청
                rspMsg = Message()
                rspMsg.Body = BodyCommonResponse(None)
                rspMsg.Body.RESPONSE = message.ACCEPTED

                rspMsg.Header = Header(None)
                rspMsg.Header.MSGTYPE = message.REP_GET_TOKEN
                rspMsg.Header.BODYLEN = rspMsg.Body.getSize()

                if self.rm.getTokenStatus() == True:
                    self.rm.lockToken()
                    print('token 방출')
                else:
                    rspMsg.Body.RESPONSE = message.DENIED
                    print('token 없음')

                MessageUtil.send(client, rspMsg)
                continue

            elif reqMsg.Header.MSGTYPE == message.REQ_RETURN_TOKEN:
                None
            elif reqMsg.Header.MSGTYPE == message.REQ_VIDEO_STREAMING:
                if self.rm.getCallStatus() == False:
                    self.rm.lockCall()
                    requestDialog = RequestDialog("구조대원 4")

                    # ret == 0: 연결 수락 / ret == 1: 연결 거절
                    ret = requestDialog.showDialog()
                    rspMsg = Message()
                    rspMsg.Header = Header(None)
                    rspMsg.Body = BodyCommonResponse(None)
                    rspMsg.Body.RESPONSE = message.ACCEPTED

                    rspMsg.Header.MSGTYPE = message.REP_VIDEO_STREAMING
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()
                    print(ret)
                    if (ret == 0):
                        MessageUtil.send(client, rspMsg)

                        #VLC 플레이어 실행
                        instance = vlc.Instance()
                        player = instance.media_player_new()
                        media = instance.media_new('rtp://141.223.84.110:1234')
                        media.get_mrl()
                        player.set_media(media)
                        player.play()
                        print("abcd")

                    else:
                        rspMsg.Body.RESPONSE = message.DENIED
                        MessageUtil.send(client, rspMsg)

                    self.rm.freeCall()
                else:
                    print("통화 거절")

                continue

            elif reqMsg.Header.MSGTYPE == message.REQ_EXIT_VIDEO_STREAMING:
                None
            elif reqMsg.Header.MSGTYPE == message.REP_EXIT_VIDEO_STREAMING:
                None
コード例 #8
0
ファイル: main.py プロジェクト: JinyouKim/rescue_integration
    def handle(self):
        print("클라이언트 접속: {0}".format(self.client_address[0]))
        client = self.request  # client socket

        try:
            while True:
                reqMsg = MessageUtil.receive(client);
                if reqMsg == None:
                    continue

                if reqMsg.Header.MSGTYPE == message.REQ_CONNECT:  # 전송 요청 처리
                    rspMsg = Message()
                    rspMsg.Body = BodyCommonResponse(None)
                    rspMsg.Body.RESPONSE = message.ACCEPTED

                    rspMsg.Header = Header(None)
                    rspMsg.Header.MSGTYPE = message.REP_CONNECT
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()

                    MessageUtil.send(client, rspMsg)
                    continue

                # 음성 토큰 요청 처리
                elif reqMsg.Header.MSGTYPE == message.REQ_GET_TOKEN:
                    rspMsg = Message()
                    rspMsg.Body = BodyCommonResponse(None)
                    rspMsg.Body.RESPONSE = message.ACCEPTED

                    rspMsg.Header = Header(None)
                    rspMsg.Header.MSGTYPE = message.REP_GET_TOKEN
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()
                    (hasToken, tokenLender) = self.rm.getTokenStatus()

                    if hasToken:
                        self.rm.lockToken(self.client_address[0])
                        print('token 방출')
                    else:
                        rspMsg.Body.RESPONSE = message.DENIED
                        print('token 없음')

                    MessageUtil.send(client, rspMsg)
                    continue

                # 음성 토큰 반납 처리
                elif reqMsg.Header.MSGTYPE == message.REQ_RETURN_TOKEN:
                    rspMsg = Message()
                    rspMsg.Body = BodyEmpty()

                    rspMsg.Header = Header(None)
                    rspMsg.Header.MSGTYPE = message.REP_RETURN_TOKEN
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()

                    self.rm.freeToken()

                    print("토큰 획득")

                    MessageUtil.send(client, rspMsg)
                    continue

                elif reqMsg.Header.MSGTYPE == message.REQ_VIDEO_STREAMING:
                    if not self.rm.getCallStatus():
                        self.rm.lockCall()
                        requestDialog = RequestDialog("구조대원")

                        # ret == 0: 연결 수락 / ret == 1: 연결 거절
                        ret = requestDialog.showDialog()
                        rspMsg = Message()
                        rspMsg.Header = Header(None)
                        rspMsg.Body = BodyCommonResponse(None)
                        rspMsg.Body.RESPONSE = message.ACCEPTED

                        rspMsg.Header.MSGTYPE = message.REP_VIDEO_STREAMING
                        rspMsg.Header.BODYLEN = rspMsg.Body.getSize()
                        print(ret)
                        if (ret == 0):
                            MessageUtil.send(client, rspMsg)

                            # 플레이어 실행
                            #os.system("D:\\gstreamer\\1.0\\x86_64\\bin\\gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false")
                            self.gstreamer = subprocess.Popen('D:\\gstreamer\\1.0\\x86_64\\bin\\gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false', shell=True)

                        else:
                            rspMsg.Body.RESPONSE = message.DENIED
                            MessageUtil.send(client, rspMsg)

                        self.rm.freeCall()
                    else:
                        None

                    continue

                elif reqMsg.Header.MSGTYPE == message.REQ_EXIT_VIDEO_STREAMING:
                    if self.rm.getCallStatus():
                            self.rm.freeCall()

                    rspMsg = Message()
                    rspMsg.Body = BodyEmpty()

                    rspMsg.Header = Header(None)
                    rspMsg.Header.MSGTYPE = message.REP_EXIT_VIDEO_STREAMING
                    rspMsg.Header.BODYLEN = rspMsg.Body.getSize()

                    MessageUtil.send(client, rspMsg)

                    #self.gstreamer.kill()
                    subprocess.Popen("TASKKILL /F /PID {pid} /T".format(pid=self.gstreamer.pid))

                    print('통화종료 요청')

                    continue
                elif reqMsg.Header.MSGTYPE == message.REP_EXIT_VIDEO_STREAMING:
                    None
        except Exception as err:
            print("Exception")
            print(err);
            (hasToken, tokenLender) = self.rm.getTokenStatus()

            if not hasToken and tokenLender == self.client_address[0]:
                self.rm.freeToken()
            return False
コード例 #9
0
ファイル: main.py プロジェクト: JinyouKim/rescue
    sockMulticast = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                                  socket.IPPROTO_UDP)
    sockMulticast.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    mreq = struct.pack("4sl", socket.inet_aton(multicastIp), socket.INADDR_ANY)
    sockMulticast.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

    try:
        ret = -1
        while ret != 0:
            ret = sockServer.connect_ex((serverIp, serverPort))
            time.sleep(2)

        reqMsg = Message()
        reqMsg.Body = BodyConnectRequest(None)
        reqMsg.Body.RESQUER_ID = '1'
        reqMsg.Header = Header(None)
        reqMsg.Header.MSGTYPE = message.REQ_CONNECT
        reqMsg.Header.BODYLEN = reqMsg.Body.getSize()

        MessageUtil.send(sockServer, reqMsg)
        rspMsg = MessageUtil.receive(sockServer)

        if rspMsg.Header.MSGTYPE != message.REP_CONNECT:
            print("Error")
            exit(0)
        if rspMsg.Body.RESPONSE != message.ACCEPTED:
            print("Connection is refused.")
            exit(0)

        print("Connected with server")