예제 #1
0
def peer2str(transport: asyncio.transports.BaseTransport) -> str:
    # https://docs.python.org/3.9/library/asyncio-protocol.html?highlight=get_extra_info#asyncio.BaseTransport.get_extra_info
    # https://docs.python.org/3.9/library/socket.html#socket.socket.getpeername
    try:
        peer = transport.get_extra_info('peername')
        if isinstance(peer, tuple):
            ip_ver = 4 if len(peer) == 2 else 6
            return "tcp{2}:{0}:{1}".format(peer[0], peer[1], ip_ver)
        elif isinstance(peer, str):
            return "unix:{0}".format(peer)
        else:
            return "?:{0}".format(peer)
    except:
        pass

    try:
        proc: Popen = transport.get_extra_info('subprocess')
        # return 'process:{}'.format(transport.pid)
        return 'process:{}'.format(proc.pid)
    except:
        pass

    try:
        pipe = transport.get_extra_info('pipe')
        return 'pipe:{}'.format(pipe)
    except:
        pass

    # gracefully fallback if we can't map the peer's transport
    return 'unknown'
예제 #2
0
def writing(client: Client, transport: asyncio.transports.BaseTransport) -> None:
    while True:
        input_ = input(client.username)
        message = client.username + input_
        transport.write(message.encode())
        if input_ == ':exit':
            break
예제 #3
0
 def connection_made(self,
                     transport: asyncio.transports.BaseTransport) -> None:
     """Callback when a connection has been established."""
     sock = transport.get_extra_info("socket")
     if sock is not None:
         self._file_number = sock.fileno()
     self.__logger.info(
         "fd=%d connection established: peer=%s:%d", self._file_number,
         *(transport.get_extra_info("peername") or ("unknown", 0)))
     self._connection_transport = transport
예제 #4
0
    def connection_made(self,
                        transport: asyncio.transports.BaseTransport
                        ) -> None:
        self._transport = transport
        assert isinstance(transport, asyncio.SubprocessTransport)
        stdout_transport = transport.get_pipe_transport(1)
        if stdout_transport is not None:
            self._pipe_fds.append(1)

        stderr_transport = transport.get_pipe_transport(2)
        if stderr_transport is not None:
            self._pipe_fds.append(2)

        stdin_transport = transport.get_pipe_transport(0)
        if stdin_transport is not None:
            self.stdin = asyncio.streams.StreamWriter(
                stdin_transport,
                protocol=self,
                reader=None,
                loop=self._loop)
예제 #5
0
    def connection_made(self,
                        transport: asyncio.transports.BaseTransport) -> None:
        self.session = self._create_session()
        self.session.peer = transport.get_extra_info('peername')
        self._reset_timeout()

        super().connection_made(transport)
        self.transport = transport
        log.info('Peer: %r', self.session.peer)
        # 处理客户请求
        self._handler_coroutine = self.loop.create_task(self._handle_client())
예제 #6
0
파일: server.py 프로젝트: igorgfidler/Chat
 def connection_made(self,
                     transport: asyncio.transports.BaseTransport) -> None:
     self.user = transport.get_extra_info('peername')[0] + str(
         transport.get_extra_info('peername')[1])
     Server.connections[self.user] = transport
예제 #7
0
파일: 01.py 프로젝트: dpazavalos/AdvPyProg
 def connection_made(self, transport: asyncio.transports.BaseTransport) -> None:
     peername = transport.get_extra_info('peername')
     print(f'connection from {peername}')
     self.transport = transport
예제 #8
0
    def connection_made(self, transport: asyncio.transports.BaseTransport):

        peername = transport.get_extra_info("peername")
        print("Server connection made from: {}".format(peername))
        self.transport = transport
예제 #9
0
    async def connection_made(
            self, transport: asyncio.transports.BaseTransport) -> None:
        """Sends message to destination"""

        self.transport = transport
        transport.write(self.message)