Professional Documents
Culture Documents
import customtkinter
import mysql.connector as mysql
# GET IP #
class IP:
def init (self):
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
soc.connect(('8.8.8.8', 80))
self.ipAddress = soc.getsockname()[0]
soc.close()
# #
while True:
data, addr = server_socket.recvfrom(MAX_SIZE)
if addr not in clients:
print("New connection from {}".format(addr))
clients[addr] = None
message = data.decode('utf-8')
print(f"Received message from {addr}: {message}")
class Client:
def init (self, host, port):
self.receive_thread = None
self.HOST = host
self.PORT = port
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def receive_messages(self):
while True:
try:
data, server_addr = self.client_socket.recvfrom(1024)
print(data.decode('utf-8'))
except:
pass
def start(self):
self.receive_thread = threading.Thread(target=self.receive_messages)
self.receive_thread.start()
while True:
message = input()
if message == 'exit':
break
self.client_socket.sendto(message.encode('utf-8'), (self.HOST, self.PORT))
self.client_socket.close()
# #
def print_user(self):
user = [self.username, self.password]
return user
def print_user(self):
user = [self.name, self.username, self.email, self.password]
return user
# CHATROOM FORMAT
class ChatRoom:
def init (self, roomname, port, password, limit):
self.roomname = roomname
self.port = port
self.password = password
self.limit = limit
def send_to_db(self):
return self.roomname, self.port, self.password, self.limit
# #
# ---DATABASE CONNECTION--- #
class DataBase:
def init (self, host, usname, psswd):
self.host = host
self.usname = usname
self.psswd = psswd
self.conn = mysql.connect(host=self.host, username=self.usname, password=self.psswd)
self.cursor = self.conn.cursor()
self.cursor.execute('use chatApplicationDatabase')
def is_connected(self):
if self.conn.is_connected():
print('Connected Successfully!')
else:
print('Connection Unsuccessful!')
return True
else:
raise 'Registration failed!'
return False
# #
self._createFrame = customtkinter.CTkFrame(
master=self._createWindow) # Use CTk.Frame() instead of cCTk.CCTkFrame
self._createFrame.pack(pady=12, padx=20, fill='both', expand=True)
def get_values(self):
roomname = self.roomnameEntry.get()
port = self.portEntry.get()
password = self._passEntry.get()
limit = self.clientEntry.get()
self.room = ChatRoom(
roomname=roomname,
port=port,
password=password,
limit=limit
).send_to_db()
print(self.room)
self._createWindow.destroy()
def run(self):
self._createWindow.mainloop()
# MAIN WINDOW
class App(customtkinter.CTk):
def init (self):
super(). init ()
self.title("SOCIAL SQUAD")
self.geometry("700x450")
self.resizable(False, False)
self.appearance_mode_menu = customtkinter.CTkOptionMenu(self.navigation_frame,
values=["Light", "Dark", "System"],
command=self.change_appearance_mode_event)
self.appearance_mode_menu.grid(row=6, column=0, padx=20, pady=20, sticky="s")
def home_button_event(self):
self.select_frame_by_name("home")
def frame_2_button_event(self):
self.select_frame_by_name("frame_2")
def frame_3_button_event(self):
self.select_frame_by_name("frame_3")
@staticmethod
def change_appearance_mode_event(new_appearance_mode):
customtkinter.set_appearance_mode(new_appearance_mode)
@staticmethod
def show_create():
CreateRoom().run()
# AUTHENTICATION CHOOSE WINDOW
class choose:
def init (self):
self._chooseWindow = ctk.CTk()
self._chooseWindow.title('Login OR Register')
self._chooseWindow.geometry('400x200')
self._frame = ctk.CTkFrame(master=self._chooseWindow)
self._frame.pack(pady=20, padx=20, fill='both', expand=True)
def login(self):
self._chooseWindow.destroy()
LoginPage().run()
def register(self):
self._chooseWindow.destroy()
RegisterPage().run()
def run(self):
self._chooseWindow.mainloop()
# LOGIN WINDOW
class LoginPage:
def init (self):
self.user = None
self._loginWindow = ctk.CTk()
self._loginWindow.geometry('500x400')
self._loginWindow.title('Login')
self._loginFrame = ctk.CTkFrame(master=self._loginWindow)
self._loginFrame.pack(pady=20, padx=20, fill='both', expand=True)
self._loginLabel = ctk.CTkLabel(master=self._loginFrame, text='Login', font=('Roboto', 40))
self._loginLabel.pack(pady=20, padx=20)
self.user_list = []
def get_values(self):
username = self._loginUsernameEntry.get()
password = self._loginPasswordEntry.get()
def back(self):
self._loginWindow.destroy()
choose().run()
def run(self):
self._loginWindow.mainloop()
choose().run()
# REGISTER WINDOW
class RegisterPage:
def init (self):
self.user = None
self._registerWindow = ctk.CTk() # Use CTk.CTk() instead of cCTk.CCTk()
self._registerWindow.title('Register')
self._registerWindow.geometry('600x750')
self.user_list = []
self._back = ctk.CTkButton(master=self._registerFrame, text='Return to Previous Window!', command=self.back)
self._back.pack()
def get_values(self):
name = self.nameEntry.get()
username = self._usernameEntry.get()
email = self._emailEntry.get()
password = self._passEntry.get()
)
print(self.user_list)
print(self.user.print_user())
return self.user, self.user_list
def back(self):
self._registerWindow.destroy()
choose().run()
def run(self):
self._registerWindow.mainloop()
# CHAT BUBBLE
class CTkChatBubble:
def init (self, master, username, message, time):
self._Buble = ctk.CTkFrame(master=master, height=65, width=380, border_color=('black', 'white'),
border_width=2)
self._Buble.pack(pady=3)
self._Buble.pack_propagate(0)
# CHAT WINDOW
class ChatUI:
def init (self, chatroomname):
self._chatWindow = ctk.CTk()
self._chatWindow.geometry('600x509')
self._chatWindow.title(chatroomname)
self.send = ctk.CTkButton(master=self.textbox_frame)
self.send.pack()
def get_message(self):
message = self.text.get()
return message
@staticmethod
def add_chat_bubble():
chat_bubble = buble
# Optionally, you can customize chat_bubble further if needed.
return chat_bubble
def add_info(self):
info = RoomInfo(master=self.infoFrame)
return info
def run(self):
self._chatWindow.mainloop()