편집 기록

편집 기록
  • 프로필 편집요청빌런님의 편집
    날짜2020.02.26

    pyqtSignal의 중복 사용이 불가능 한지 궁금합니다.


    서버와 연결 후에 서버로부터 받은 데이터에 따라 분류 후 해당 메서드로 내용을 보내려고 하는데 pyqtSignal이 Login에서는 잘 되는데 다른 경우는 아예 해당 메서드로 전송이 되지 않습니다. 한 번에 한 개 밖에 못 쓰는건지, 아니면 해당 부분에 무한루프가 존재해야 하는지 궁금합니다.

    class Signal(QObject):  
        LoginInfo = pyqtSignal(str) 
        Plant = pyqtSignal(str)
        tagedit = pyqtSignal(str)
    
    class ClientSocket: 
    
        def __init__(self, parent):
            self.parent = parent
            self.disconn = Signal()
            self.Plant = Plant
            self.disconn.Plant.connect(self.Plant().results) 
            self.tags = Signal()
            self.tagEdit = TagEdit
            self.tags.tagedit.connect(self.tagEdit().tagdelete)
            self.recv = Signal()
            self.Login = LogIn
            self.recv.LoginInfo.connect(self.Login().ConfirmUser)
            self.bConnect = False
    
        def __del__(self):
            self.stop()
    
        def connectServer(self, ip, port):
            self.client = socket(AF_INET, SOCK_STREAM)     
    
            try:
                self.client.connect( (ip, port) ) 
            except Exception as e:
                print('Connect Error : ', e)
                return False
            else:
                self.bConnect = True 
                self.t = Thread(target=self.receive, args=(self.client,)) 
                self.t.start()
                print('Connected')
    
            return True
    
        def stop(self):
            self.bConnect = False       
            if hasattr(self, 'client'): 
                self.client.close() 
                del(self.client) 
                print('Client Stop') 
    
        def receive(self, client):
            while self.bConnect:
                try:
                    recv = client.recv(1024)
                except Exception as e: 
                    print('Recv() Error :', e)                
                    break
                else:
                    msg = str(recv, encoding='utf-8') 
                    if msg: 
                        msg_return = Result_divide(self, msg)
                        if msg_return == "LoginOK":
                            self.recv.LoginInfo.emit(msg_return) 
                        elif msg_return == "태그 등록 완료":
                            self.tags.tagedit.emit(msg_return)
                        elif msg_return == "Delete":
                            self.tags.tagedit.emit(msg_return)
                        print('[RECV]:', msg_return)
    
            self.stop()
    
        def send(self, msg):
            if not self.bConnect:
                return
            try:      
                self.client.send(msg.encode()) 
            except Exception as e:
                print('Send() Error : ', e)
    
  • 프로필 반시님의 편집
    날짜2020.02.26

    pyqtSignal의 중복 사용이 불가능 한지 궁금합니다.


    서버와 연결 후에 서버로부터 받은 데이터에 따라 분류 후 해당 메서드로 내용을 보내려고 하는데 pyqtSignal이 Login에서는 잘 되는데 다른 경우는 아예 해당 메서드로 전송이 되지 않습니다. 한 번에 한 개 밖에 못 쓰는건지, 아니면 해당 부분에 무한루프가 존재해야 하는지 궁금합니다.

    class Signal(QObject):  
        LoginInfo = pyqtSignal(str) 
        Plant = pyqtSignal(str)
        tagedit = pyqtSignal(str)
    

    class ClientSocket:

    def __init__(self, parent):
        self.parent = parent
        self.disconn = Signal()
        self.Plant = Plant
        self.disconn.Plant.connect(self.Plant().results) 
        self.tags = Signal()
        self.tagEdit = TagEdit
        self.tags.tagedit.connect(self.tagEdit().tagdelete)
        self.recv = Signal()
        self.Login = LogIn
        self.recv.LoginInfo.connect(self.Login().ConfirmUser)
        self.bConnect = False
    
    def __del__(self):
        self.stop()
    
    def connectServer(self, ip, port):
        self.client = socket(AF_INET, SOCK_STREAM)     
    
        try:
            self.client.connect( (ip, port) ) 
        except Exception as e:
            print('Connect Error : ', e)
            return False
        else:
            self.bConnect = True 
            self.t = Thread(target=self.receive, args=(self.client,)) 
            self.t.start()
            print('Connected')
    
        return True
    
    def stop(self):
        self.bConnect = False       
        if hasattr(self, 'client'): 
            self.client.close() 
            del(self.client) 
            print('Client Stop') 
    
    def receive(self, client):
        while self.bConnect:
            try:
                recv = client.recv(1024)
            except Exception as e: 
                print('Recv() Error :', e)                
                break
            else:
                msg = str(recv, encoding='utf-8') 
                if msg: 
                    msg_return = Result_divide(self, msg)
                    if msg_return == "LoginOK":
                        self.recv.LoginInfo.emit(msg_return) 
                    elif msg_return == "태그 등록 완료":
                        self.tags.tagedit.emit(msg_return)
                    elif msg_return == "Delete":
                        self.tags.tagedit.emit(msg_return)
                    print('[RECV]:', msg_return)
    
        self.stop()
    
    def send(self, msg):
        if not self.bConnect:
            return
        try:      
            self.client.send(msg.encode()) 
        except Exception as e:
            print('Send() Error : ', e)
    ```