Advertisement
Falexom

Untitled

Nov 1st, 2021
1,139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.22 KB | None | 0 0
  1. # small chat for a lonely person
  2. # need to debug and some updates to work
  3. # all in single paste
  4. import socket
  5. import asyncio
  6. from datetime import datetime
  7. from os import system
  8. import os
  9.  
  10. class Socket:
  11.     def __init__(self):
  12.         self.socket = socket.socket(
  13.             socket.AF_INET,
  14.             socket.SOCK_STREAM,
  15.         )  # TCP/IP
  16.         self.main_loop = asyncio.get_event_loop()   # single loop
  17.  
  18.     async def send_data(self, data):
  19.         raise NotImplementedError()
  20.  
  21.     async def listen_socket(self, lstn_socket=None):
  22.         raise NotImplementedError()
  23.  
  24.     async def main(self):
  25.         raise NotImplementedError()   # if no-async
  26.  
  27.     def start(self):
  28.         self.main_loop.run_until_complete(self.main())
  29.  
  30.  
  31.     def set_up(self):
  32.         raise NotImplementedError()
  33. class Server(Socket):
  34.     def __init__(self):
  35.         super(Server, self).__init__()
  36.  
  37.         self.users = []
  38.  
  39.     def set_up(self):
  40.         self.socket.bind(("127.0.0.1", 5000))
  41.         self.socket.listen(5)
  42.         self.socket.setblocking(False)  # non-blocking
  43.         print('Server is listening')
  44.  
  45.     async def send_data(self, data):
  46.         for user in self.users:
  47.            await self.main_loop.sock_sendall(user, data)
  48.  
  49.     async def listen_socket(self, lstn_socket=None):
  50.         if not lstn_socket:
  51.             return
  52.         while True:
  53.             data = self.main_loop.sock_recv(lstn_socket, 2048)  # bytes
  54.             print(f"User sent {data}")
  55.             await self.send_data(data)
  56.  
  57.     async def accept_sockets(self):
  58.         while True:
  59.             u_socket, address = await self.main_loop.sock_accept(self.socket)    # connected
  60.             print(f"User <{address[0]}> connected.")
  61.  
  62.             self.users.append(u_socket)
  63.             self.main_loop.create_task(self.listen_socket(u_socket))
  64.  
  65.     async def main(self):
  66.         await self.main_loop.create_task(self.accept_sockets())
  67.  
  68.  
  69. if __name__ == '__main__':
  70.     server = Server()
  71.     server.set_up()
  72.     server.start()  # main loop
  73.  
  74. from Socket import Socket
  75. from datetime import datetime
  76.  
  77. from os import system
  78. import asyncio
  79. import os
  80.  
  81.  
  82. class Client(Socket):
  83.     def __init__(self):
  84.         super(Client, self).__init__()
  85.         self.messages = ''
  86.  
  87.     def set_up(self):
  88.         self.socket.connect(
  89.             ("127.0.0.1", 5000)
  90.         )
  91.         self.socket.setblocking(False)    # non-block
  92.  
  93.     async def listen_socket(self, lstn_socket=None):    # listening
  94.         while True:
  95.             data = await self.main_loop.sock_recv(self.socket, 2048)    # get
  96.             self.messages += f"{datetime.now()} - {data}\n"
  97.  
  98.             system("cls")
  99.             print(self.messages)
  100.  
  101.     async def send_data(self, data=None):
  102.         while True:
  103.             data = await self.main_loop.run_in_executor(None, input, ":::")  # get
  104.             await self.main_loop.sock_sendall(self.socket, data.encode("utf-8"))
  105.  
  106.     async def main(self):
  107.         await asyncio.gather(
  108.             # all in await
  109.             self.main_loop.create_task(self.listen_socket()),
  110.             self.main_loop.create_task(self.send_data())
  111.  
  112.         )
  113.  
  114.  
  115. if __name__ == '__main__':
  116.     client = Client()
  117.     client.set_up()
  118.  
  119.     client.start()
  120.  
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement