Advertisement
Singelinho

CorePlay++[SQLITE3]

Aug 10th, 2015
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.94 KB | None | 0 0
  1. from datetime import datetime
  2. import asyncore
  3. import sqlite3, os
  4.  
  5. #CorePlay++ [Server]
  6. class Server(asyncore.dispatcher):
  7.     def __init__(self, host, port, maxusers):
  8.         asyncore.dispatcher.__init__(self)
  9.         self.create_socket()
  10.         self.set_reuse_addr()
  11.         self.bind((host,port))
  12.         self.listen(maxusers)
  13.         os.system('title CorePlay++')
  14.         print(" ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗      █████╗ ██╗   ██╗")
  15.         print("██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║     ██╔══██╗╚██╗ ██╔╝")
  16.         print("██║     ██║   ██║██████╔╝█████╗  ██████╔╝██║     ███████║ ╚████╔╝ ")
  17.         print("██║     ██║   ██║██╔══██╗██╔══╝  ██╔═══╝ ██║     ██╔══██║  ╚██╔╝  ")
  18.         print("╚██████╗╚██████╔╝██║  ██║███████╗██║     ███████╗██║  ██║   ██║   ")
  19.         print(" ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝     ╚══════╝╚═╝  ╚═╝   ╚═╝   ")
  20.         print(">> Servidor Iniciado...")
  21.         print(">> Host {} / Port {} / MaxUsers {}".format(host, port, maxusers))
  22.  
  23.     #Aceitar conexões
  24.     def handle_accepted(self, sock, addr):
  25.         global clients_list, connections
  26.         print(">> Conexão de entrada de {}".format(repr(addr)))
  27.         network = Network(sock)
  28.         for i in clients_list.keys():
  29.             if clients_list[i] == None:
  30.                 clients_list[i] = sock
  31.                 clients_list[i].send(str.encode("<0 {}>'e' n=1</0>\n".format(i)))
  32.                 connections += 1
  33.                 print(">> Total de conexões: {}".format(connections))
  34.                 break
  35.            
  36. #CorePlay++ [Network]
  37. class Network(asyncore.dispatcher_with_send):
  38.     #Atribui todas as variáveis
  39.     def instances(self):
  40.         global clients_list, connections, id_deleted
  41.         self.clients_list = clients_list
  42.         self.connections = connections
  43.         self.id_deleted = id_deleted
  44.         self.conn = sqlite3.connect('contas.db')
  45.         self.cursor = self.conn.cursor()
  46.         self.data = datetime.now()
  47.  
  48.     #Logger (Descartável)
  49.     def logger(self,user,method,note=''):
  50.         texto_file = (str(self.data.day)+"/"+str(self.data.month)+"/"+str(self.data.year)+"|")
  51.         texto_file2 = (str(self.data.hour)+"/"+str(self.data.minute)+"/"+str(self.data.second)+"\n")
  52.         escrever = open('logger.txt', "a+")
  53.         escrever.write("Acesso de "+user+" para "+method+"Obs("+note+")"+":"+texto_file+texto_file2)
  54.         escrever.close()
  55.    
  56.     #Enviar para um cliente conectados
  57.     def send_client(self, client_id, msg):
  58.         self.clients_list[client_id].send(str.encode(msg))
  59.  
  60.     #Enviar para todos os clientes conectados
  61.     def send_all(self, msg):
  62.         for i in self.clients_list.keys():
  63.             self.clients_list[i].send(str.encode(msg))
  64.        
  65.     #Recebe os pacotes    
  66.     def handle_read(self):
  67.         Network.instances(self)
  68.         data = self.recv(1024)
  69.         if data:
  70.             Network.handle_treat(self, str(data,'utf-8'))
  71.  
  72.     #Tratamento dos pacotes
  73.     def handle_treat(self, line):
  74.         for data in line.split('\n'):
  75.             #Login
  76.             if data.find("<login>") != -1:
  77.                 data = data.replace("<login>","",1)
  78.                 data = data.replace("</login>","",1)
  79.                 array = data.split("|")
  80.                 Network.check_account(self,array[0],array[1])
  81.             #Registro
  82.             elif data.find("<reges>") != -1:
  83.                 data = data.replace("<reges>","",1)
  84.                 data = data.replace("</reges>","",1)
  85.                 array = data.split("|")
  86.                 Network.new_account(self,array[0],array[1],array[2])
  87.             #Close
  88.             elif data.find("<9>") != -1:
  89.                 data = data.replace("<9>","",1)
  90.                 data = data.replace("</9>","",1)
  91.                 self.id_deleted = int(line)
  92.  
  93.     #Send_Group
  94.     def send_group(self, account):
  95.         self.cursor.execute('SELECT grupo FROM usuarios WHERE login=?',(account,))
  96.         grupo = self.cursor.fetchone()
  97.         print(">> Grupo da conta [{}] foi enviado.".format(account))
  98.         Network.logger(self,account,"[Send_Group]","Grupo enviado")
  99.         line_send = ("<3>{}</3>\n".format(grupo[0]))
  100.         self.send(str.encode(line_send))
  101.    
  102.     #Check_Account
  103.     def check_account(self, account, password):
  104.         self.cursor.execute('SELECT login, senha FROM usuarios WHERE login=?',(account,))
  105.         self.conn.commit()
  106.         array = self.cursor.fetchone()
  107.         if (password != "*test*"):
  108.             if (array == None):
  109.                 print(">> Entrada de [{}|{}] não realizada, devido a login incompatível.".format(account,password))
  110.                 Network.logger(self,account+"|"+password,"[Check_Account]","Login incompatível")
  111.                 self.send(str.encode("<login>wu</login>\n"))
  112.             else:
  113.                 if (array[1] != password):
  114.                     print(">> Entrada de [{}|{}] não realizada, devido a senha incompatível.".format(account,password))
  115.                     Network.logger(self,account+"|"+password,"[Check_Account]","Senha incompatível")
  116.                     self.send(str.encode("<login>wp</login>\n"))
  117.                 else:
  118.                     print(">> Entrada de [{}|{}] realizada.".format(account,password))
  119.                     Network.logger(self,account+"|"+password,"[Check_Account]")
  120.                     #--Enviar Nome [<2>]
  121.                     name = ("<2>{}</2>\n".format(account))
  122.                     self.send(str.encode(name))
  123.                     print(">> Nome da conta [{}] foi enviado.".format(account))
  124.                     Network.logger(self,account,"[SEND(NAME)]","Nome enviado")
  125.                     #--Enviar Grupo [<3>]
  126.                     Network.send_group(self,account)
  127.                     #--Logar
  128.                     self.send(str.encode("<login>allow</login>\n"))
  129.                     Network.logger(self,account,"[Check_Account]","Login Allow")
  130.         else:
  131.             if (array == None):
  132.                 print(">> Login [{}] não existe".format(account))
  133.                 Network.logger(self,account,"[Check_Account]")
  134.                 self.send(str.encode("<login>wp</login>\n"))
  135.             else:
  136.                 print(">> Login [{}] já existe".format(account))
  137.                 Network.logger(self,account,"[Check_Account]")
  138.                 self.send(str.encode("<login>wu</login>\n"))
  139.  
  140.     #New_Account
  141.     def new_account(self,account,password,e_mail,group='standard'):
  142.         self.cursor.execute("""INSERT INTO usuarios (login,senha,email,grupo)
  143.        VALUES (?,?,?,?)""",(account,password,e_mail,group))
  144.         self.conn.commit()
  145.         Network.logger(self,account+"|"+password+"|"+e_mail+"|"+group,"[New_Account]","Conta cadastrada")
  146.         print(">> Usuário [{}] cadastrado.".format(account))
  147.    
  148.     #Fechar
  149.     def handle_close(self):
  150.         self.clients_list[self.id_deleted] = None
  151.         self.connections -= 1
  152.         print(">> Total de conexões: {}".format(self.connections))
  153.         self.close()
  154.  
  155.     #Error
  156.     def handle_error(self):
  157.         os.system('cls')
  158.         print(">> Ocorreu um error, servidor reiniciado.")
  159.         Network.logger(self,'Servidor','[Handle_Error]','Error no servidor')
  160.         Server.__init__(self,'localhost',20031,30)
  161.        
  162. clients_list = {}
  163. connections = 0
  164. id_deleted = None
  165. for i in range(1,30+1):
  166.     clients_list[i] = None
  167. Server('localhost',20031,30)
  168. asyncore.loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement