Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import datetime
- import asyncore
- import sqlite3, os
- #CorePlay++ [Server]
- class Server(asyncore.dispatcher):
- def __init__(self, host, port, maxusers):
- asyncore.dispatcher.__init__(self)
- self.create_socket()
- self.set_reuse_addr()
- self.bind((host,port))
- self.listen(maxusers)
- os.system('title CorePlay++')
- print(" ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ █████╗ ██╗ ██╗")
- print("██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██╔══██╗╚██╗ ██╔╝")
- print("██║ ██║ ██║██████╔╝█████╗ ██████╔╝██║ ███████║ ╚████╔╝ ")
- print("██║ ██║ ██║██╔══██╗██╔══╝ ██╔═══╝ ██║ ██╔══██║ ╚██╔╝ ")
- print("╚██████╗╚██████╔╝██║ ██║███████╗██║ ███████╗██║ ██║ ██║ ")
- print(" ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ")
- print(">> Servidor Iniciado...")
- print(">> Host {} / Port {} / MaxUsers {}".format(host, port, maxusers))
- #Aceitar conexões
- def handle_accepted(self, sock, addr):
- global clients_list, connections
- print(">> Conexão de entrada de {}".format(repr(addr)))
- network = Network(sock)
- for i in clients_list.keys():
- if clients_list[i] == None:
- clients_list[i] = sock
- clients_list[i].send(str.encode("<0 {}>'e' n=1</0>\n".format(i)))
- connections += 1
- print(">> Total de conexões: {}".format(connections))
- break
- #CorePlay++ [Network]
- class Network(asyncore.dispatcher_with_send):
- #Atribui todas as variáveis
- def instances(self):
- global clients_list, connections, id_deleted
- self.clients_list = clients_list
- self.connections = connections
- self.id_deleted = id_deleted
- self.conn = sqlite3.connect('contas.db')
- self.cursor = self.conn.cursor()
- self.data = datetime.now()
- #Logger (Descartável)
- def logger(self,user,method,note=''):
- texto_file = (str(self.data.day)+"/"+str(self.data.month)+"/"+str(self.data.year)+"|")
- texto_file2 = (str(self.data.hour)+"/"+str(self.data.minute)+"/"+str(self.data.second)+"\n")
- escrever = open('logger.txt', "a+")
- escrever.write("Acesso de "+user+" para "+method+"Obs("+note+")"+":"+texto_file+texto_file2)
- escrever.close()
- #Enviar para um cliente conectados
- def send_client(self, client_id, msg):
- self.clients_list[client_id].send(str.encode(msg))
- #Enviar para todos os clientes conectados
- def send_all(self, msg):
- for i in self.clients_list.keys():
- self.clients_list[i].send(str.encode(msg))
- #Recebe os pacotes
- def handle_read(self):
- Network.instances(self)
- data = self.recv(1024)
- if data:
- Network.handle_treat(self, str(data,'utf-8'))
- #Tratamento dos pacotes
- def handle_treat(self, line):
- for data in line.split('\n'):
- #Login
- if data.find("<login>") != -1:
- data = data.replace("<login>","",1)
- data = data.replace("</login>","",1)
- array = data.split("|")
- Network.check_account(self,array[0],array[1])
- #Registro
- elif data.find("<reges>") != -1:
- data = data.replace("<reges>","",1)
- data = data.replace("</reges>","",1)
- array = data.split("|")
- Network.new_account(self,array[0],array[1],array[2])
- #Close
- elif data.find("<9>") != -1:
- data = data.replace("<9>","",1)
- data = data.replace("</9>","",1)
- self.id_deleted = int(line)
- #Send_Group
- def send_group(self, account):
- self.cursor.execute('SELECT grupo FROM usuarios WHERE login=?',(account,))
- grupo = self.cursor.fetchone()
- print(">> Grupo da conta [{}] foi enviado.".format(account))
- Network.logger(self,account,"[Send_Group]","Grupo enviado")
- line_send = ("<3>{}</3>\n".format(grupo[0]))
- self.send(str.encode(line_send))
- #Check_Account
- def check_account(self, account, password):
- self.cursor.execute('SELECT login, senha FROM usuarios WHERE login=?',(account,))
- self.conn.commit()
- array = self.cursor.fetchone()
- if (password != "*test*"):
- if (array == None):
- print(">> Entrada de [{}|{}] não realizada, devido a login incompatível.".format(account,password))
- Network.logger(self,account+"|"+password,"[Check_Account]","Login incompatível")
- self.send(str.encode("<login>wu</login>\n"))
- else:
- if (array[1] != password):
- print(">> Entrada de [{}|{}] não realizada, devido a senha incompatível.".format(account,password))
- Network.logger(self,account+"|"+password,"[Check_Account]","Senha incompatível")
- self.send(str.encode("<login>wp</login>\n"))
- else:
- print(">> Entrada de [{}|{}] realizada.".format(account,password))
- Network.logger(self,account+"|"+password,"[Check_Account]")
- #--Enviar Nome [<2>]
- name = ("<2>{}</2>\n".format(account))
- self.send(str.encode(name))
- print(">> Nome da conta [{}] foi enviado.".format(account))
- Network.logger(self,account,"[SEND(NAME)]","Nome enviado")
- #--Enviar Grupo [<3>]
- Network.send_group(self,account)
- #--Logar
- self.send(str.encode("<login>allow</login>\n"))
- Network.logger(self,account,"[Check_Account]","Login Allow")
- else:
- if (array == None):
- print(">> Login [{}] não existe".format(account))
- Network.logger(self,account,"[Check_Account]")
- self.send(str.encode("<login>wp</login>\n"))
- else:
- print(">> Login [{}] já existe".format(account))
- Network.logger(self,account,"[Check_Account]")
- self.send(str.encode("<login>wu</login>\n"))
- #New_Account
- def new_account(self,account,password,e_mail,group='standard'):
- self.cursor.execute("""INSERT INTO usuarios (login,senha,email,grupo)
- VALUES (?,?,?,?)""",(account,password,e_mail,group))
- self.conn.commit()
- Network.logger(self,account+"|"+password+"|"+e_mail+"|"+group,"[New_Account]","Conta cadastrada")
- print(">> Usuário [{}] cadastrado.".format(account))
- #Fechar
- def handle_close(self):
- self.clients_list[self.id_deleted] = None
- self.connections -= 1
- print(">> Total de conexões: {}".format(self.connections))
- self.close()
- #Error
- def handle_error(self):
- os.system('cls')
- print(">> Ocorreu um error, servidor reiniciado.")
- Network.logger(self,'Servidor','[Handle_Error]','Error no servidor')
- Server.__init__(self,'localhost',20031,30)
- clients_list = {}
- connections = 0
- id_deleted = None
- for i in range(1,30+1):
- clients_list[i] = None
- Server('localhost',20031,30)
- asyncore.loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement