diff --git a/python/test/1000/Account.csv b/python/test/1000/Account.csv new file mode 100644 index 0000000..572fe00 --- /dev/null +++ b/python/test/1000/Account.csv @@ -0,0 +1,2 @@ +Id,Password,NetName,UpDataTime +1000,1,aw,2024-04-18 23:22:44 diff --git a/python/test/1000/Contacts.csv b/python/test/1000/Contacts.csv new file mode 100644 index 0000000..0dce8d5 --- /dev/null +++ b/python/test/1000/Contacts.csv @@ -0,0 +1,5 @@ +Contact,Remark,State,UpDataTime +1001,HJads,True,2024-04-18 23:22:44 +1002,lsy,True,2024-04-18 23:22:44 +1003,sx,True,2024-04-18 23:22:44 +1004,不啊,True,2024-04-18 23:22:44 diff --git a/python/test/1000/History.csv b/python/test/1000/History.csv new file mode 100644 index 0000000..95bbda5 --- /dev/null +++ b/python/test/1000/History.csv @@ -0,0 +1,3 @@ +Send,Receive,Type,Content,Time +1000,1001,text,你好1,2024-04-18 23:22:44 +1000,1001,text,你好3,2024-04-18 23:22:44 diff --git a/python/test/Client/Page/Chat_main.py b/python/test/Client/Page/Chat_main.py index 35f4b88..80c95da 100644 --- a/python/test/Client/Page/Chat_main.py +++ b/python/test/Client/Page/Chat_main.py @@ -1,3 +1,4 @@ +import os import wx import wx.aui import wx.lib.scrolledpanel as scrolled @@ -11,6 +12,10 @@ class ChatFrame(wx.Frame, ProcessClient): wx.Frame.__init__(self, None, size=(800, 600), title="账号: " + str(Id)) ProcessClient.__init__(self) + current_file_path = __file__ + current_file_name = os.path.basename(current_file_path).split('.')[0] + self.Process_client_send("Server", "Name", current_file_name) + ChatMain_Panel = wx.Panel(self, style=wx.BORDER_SUNKEN) ChatMain_box = wx.BoxSizer(wx.HORIZONTAL) ChatMain_Panel.SetSizer(ChatMain_box) @@ -82,6 +87,8 @@ class ChatFrame(wx.Frame, ProcessClient): ChatMain_Panel.SetSizer(ChatMain_box) + self.chat_page.ChatPage_add_Contact_person(999, 'Remark', 'Time') + def click_chat_button(self, event): self.chat_page.Hide() self.connect_page.Hide() @@ -114,6 +121,20 @@ class ChatFrame(wx.Frame, ProcessClient): self.find_page.Show() self.Layout() + def Process_client_pick(self, data): + if data['target'] in ['ALL', 'Chat_main']: + match data['function']: + case 'ChatPage_add_Contact_person': + data = data['content'] + Contact = eval(data['Contact']) + Remark = data['Remark'] + Time = data['UpDataTime'] + self.chat_page.ChatPage_add_Contact_person(Contact, Remark, Time) + self.Layout() + case 'ChatPage_add_Contact_tab': + # self.ChatPage.ChatPage_add_Contact_tab('Id', 'Remark','Remark') + print(data) + class ChatPage(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, style=wx.BORDER_SUNKEN) @@ -133,28 +154,18 @@ class ChatFrame(wx.Frame, ProcessClient): self.SetSizer(ChatPage_main_box) - def ChatPage_add_Contact_person(self, Id, Remark, info): + def ChatPage_add_Contact_person(self, Id, Remark, Time): ChatPage_add_Contact_person_box = wx.BoxSizer(wx.VERTICAL) - ChatPage_add_Contact_person_top_box = wx.BoxSizer(wx.HORIZONTAL) if len(Remark) > 6: Remark = Remark[:6] + "..." else: Remark += ''.join([" " for i in range(max(0, 9 - len(Remark)))]) ChatPage_add_Contact_person_NetName = wx.StaticText(self.ChatPage_Contact_person_panel, -1, Remark) - ChatPage_add_Contact_person_top_box.Add(ChatPage_add_Contact_person_NetName, 0, wx.ALIGN_LEFT, 0) + ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_NetName, 0, wx.ALIGN_LEFT, 0) - ChatPage_add_Contact_person_top_box.AddSpacer(20) - - ChatPage_add_Contact_person_date = wx.StaticText(self.ChatPage_Contact_person_panel, -1, - time.strftime("%Y/%m/%d", time.localtime())) - ChatPage_add_Contact_person_top_box.Add(ChatPage_add_Contact_person_date, 0, wx.ALIGN_CENTER_VERTICAL, 0) - ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_top_box, 0, wx.EXPAND, 0) - - if len(info) > 10: - info = info[:10] + "..." - ChatPage_add_Contact_person_info = wx.StaticText(self.ChatPage_Contact_person_panel, -1, info) - ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_info, 0, wx.ALIGN_LEFT, 0) + ChatPage_add_Contact_person_date = wx.StaticText(self.ChatPage_Contact_person_panel, -1, Time) + ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_date, 0, wx.EXPAND, 0) self.ChatPage_Contact_person_panel.GetSizer().Add(ChatPage_add_Contact_person_box, 0, wx.ALL, 5) self.ChatPage_Contact_person_panel.Layout() diff --git a/python/test/Client/Page/Login.py b/python/test/Client/Page/Login.py index 21d8105..4bf6c3f 100644 --- a/python/test/Client/Page/Login.py +++ b/python/test/Client/Page/Login.py @@ -109,8 +109,9 @@ class LoginFrame(wx.Frame, ProcessClient): if receive_content["genre"] == '登录': match receive_content["data"]['status']: case 0: - self.Destroy() + self.Process_client_send("file_operate", "detection_data", receive_content["data"]['account']) multiprocessing.Process(target=open_chat_window, args=(receive_content["data"]['account'],)).start() + self.Destroy() case -1: wx.MessageBox('重复登录', '登录', wx.OK | wx.ICON_INFORMATION) case 1: diff --git a/python/test/Client/Transmission/Session_server.py b/python/test/Client/Transmission/Session_server.py index facbc42..dbe8f71 100644 --- a/python/test/Client/Transmission/Session_server.py +++ b/python/test/Client/Transmission/Session_server.py @@ -48,7 +48,7 @@ class Session_server(ProcessClient): receive_content = json.loads(receive_content_json) self.content_pick(receive_content) except Exception as a: - print("接收错误:" + str(a)) + print("客户端接收错误:" + str(a)) self.server_status = False self.Process_client_send("ALL", "server_status", self.server_status) @@ -57,7 +57,7 @@ class Session_server(ProcessClient): try: data = {"genre": genre, "target": target, "data": content, "datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - data_json = json.dumps(data) + data_json = json.dumps(data)+'\n' self.server_socket.send(data_json.encode("utf-8")) except Exception as a: print("发送错误:" + str(a)) @@ -77,7 +77,6 @@ class Session_server(ProcessClient): case '注册' | '登录': self.Process_client_send("Login", "login_page_receive", data) case '数据更新': - print(data) - self.Process_client_send("file_operate", "login_page_receive", data) + self.Process_client_send("file_operate", "save_data", data['data']) diff --git a/python/test/Client/Transmission/file_operate.py b/python/test/Client/Transmission/file_operate.py index bf117c3..44bd234 100644 --- a/python/test/Client/Transmission/file_operate.py +++ b/python/test/Client/Transmission/file_operate.py @@ -1,42 +1,93 @@ import os import csv +import time from .Process_Client import ProcessClient class FileOperate(ProcessClient): - def __init__(self): + def __init__(self, user_id): ProcessClient.__init__(self) + self.user_id = user_id + + self.root_path = None + self.Account_path = None + self.Contacts_path = None + self.History_path = None + self.file_root_path = None + self.other_file_path = None + self.image_file_path = None + current_file_path = __file__ current_file_name = os.path.basename(current_file_path).split('.')[0] self.Process_client_send("Server", "Name", current_file_name) def detection_data(self, Id): - root_path = rf'.\{Id}' - info_path = root_path + r'\info.csv' - file_root_path = root_path + r'\file' - other_file_path = file_root_path + r'\other' - image_file_path = file_root_path + r'\image' - if not os.path.isdir(root_path): - os.mkdir(root_path) - if not os.path.isdir(file_root_path): - os.mkdir(file_root_path) - os.mkdir(other_file_path) - os.mkdir(image_file_path) - if not os.path.exists(info_path): - with open(info_path, 'w', encoding='utf-8') as f: + self.user_id = Id + self.root_path = rf'.\{Id}' + self.Account_path = self.root_path + r'\Account.csv' + self.Contacts_path = self.root_path + r'\Contacts.csv' + self.History_path = self.root_path + r'\History.csv' + self.file_root_path = self.root_path + r'\file' + self.other_file_path = self.file_root_path + r'\other' + self.image_file_path = self.file_root_path + r'\image' + if not os.path.isdir(self.root_path): + os.mkdir(self.root_path) + if not os.path.isdir(self.file_root_path): + os.mkdir(self.file_root_path) + os.mkdir(self.other_file_path) + os.mkdir(self.image_file_path) + if not os.path.exists(self.Account_path): + with open(self.Account_path, 'w', encoding='utf-8') as f: pass - with open(info_path, 'r+', encoding='utf-8') as info: - if info.tell() == 0: - date = None + with open(self.Account_path, 'r+', encoding='utf-8') as info: + data = csv.DictReader(info) + if os.path.getsize(self.Account_path) == 0: # 检查文件大小是否为0 + date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(0)) + else: + for d in data: + date = d['UpDataTime'] + target = "服务器" genre = "数据更新" - content = date - data = {"genre": genre, "target": target, "content": content} + data = {"genre": genre, "target": target, "content": date} self.Process_client_send("Session_server", "send_server", data) + time.sleep(1) + with open(self.Contacts_path, 'r', encoding='utf-8') as file: + data = csv.DictReader(file) + for row in data: + self.Process_client_send("Chat_main", "ChatPage_add_Contact_person", row) + + + + def save_data(self, data): + target = list(data.keys())[0] + data = list(data.values())[0] + match target: + case 'Account': + with open(self.Account_path, 'w+', encoding='utf-8', newline='') as file: + csv_file = csv.writer(file) + csv_file.writerow(list(data.keys())) + csv_file.writerow(list(data.values())) + case 'Contacts': + with open(self.Contacts_path, 'a+', encoding='utf-8', newline='') as file: + csv_file = csv.writer(file) + if os.path.getsize(self.Contacts_path) == 0: # 检查文件大小是否为0 + csv_file.writerow(list(data.keys())) + csv_file.writerow(list(data.values())) + case 'History': + with open(self.History_path, 'a+', encoding='utf-8', newline='') as file: + csv_file = csv.writer(file) + if os.path.getsize(self.History_path) == 0: # 检查文件大小是否为0 + csv_file.writerow(list(data.keys())) + csv_file.writerow(list(data.values())) + def Process_client_pick(self, data): if data['target'] in ['ALL', 'file_operate']: - print(data) - #match data['function']: + match data['function']: + case 'detection_data': + self.detection_data(data['content']) + case 'save_data': + self.save_data(data['content']) diff --git a/python/test/Client/__init__.py b/python/test/Client/__init__.py index e727993..38abfd7 100644 --- a/python/test/Client/__init__.py +++ b/python/test/Client/__init__.py @@ -4,10 +4,12 @@ from .Transmission import * class start_all: def __init__(self): - ProcessServer() + Session_server() + FileOperate(None) + app = wx.App() LoginFrame().Show() app.MainLoop() diff --git a/python/test/Server/Transmission/Database_formula.py b/python/test/Server/Transmission/Database_formula.py index 05bf7ba..92bb34c 100644 --- a/python/test/Server/Transmission/Database_formula.py +++ b/python/test/Server/Transmission/Database_formula.py @@ -94,37 +94,48 @@ class database(ProcessClient): print(a) def detection_data(self, Id, date): - if date is None: - datas = [] + datas = [] - self.database_cursor.execute(f"select Id,Password,NetName,UpDataTime from Account where Id = {Id}") - Account_database = self.database_cursor.fetchall() - Account_content = {'Id': Account_database[0][0], - 'Password': Account_database[0][1], - 'NetName': Account_database[0][2], - 'UpDataTime': Account_database[0][3].strftime('%Y-%m-%d %H:%M:%S')} - Account_data = {"Account": Account_content} - datas.append(Account_data) + self.database_cursor.execute(f"select Id,Password,NetName,UpDataTime from Account where Id = {Id}") + Account_database = self.database_cursor.fetchall() + Account_content = {'Id': Account_database[0][0], + 'Password': Account_database[0][1], + 'NetName': Account_database[0][2], + 'UpDataTime': Account_database[0][3].strftime('%Y-%m-%d %H:%M:%S')} + if Account_content['UpDataTime'] == date: + return - self.database_cursor.execute(f"select ContactsId,Remark,State from Contacts where UserId = {Id}") - Contacts_database = self.database_cursor.fetchall() - Contacts_data = {"Contacts": Contacts_database} + Account_data = {"Account": Account_content} + datas.append(Account_data) + + self.database_cursor.execute( + f"select ContactsId,Remark,State,UpDataTime from Contacts where UserId = {Id} and UpDataTime > '{date}'") + Contacts_database = self.database_cursor.fetchall() + for Contact in Contacts_database: + Contacts_content = {'Contact': Contact[0], + 'Remark': Contact[1], + 'State': Contact[2], + 'UpDataTime': Contact[3].strftime('%Y-%m-%d %H:%M:%S')} + Contacts_data = {"Contacts": Contacts_content} datas.append(Contacts_data) - self.database_cursor.execute(f"select ContactsId,Remark,State from Contacts where UserId = {Id}") - Contacts_database = self.database_cursor.fetchall() - Contacts_data = {"Contacts": Contacts_database} - datas.append(Contacts_data) - - self.database_cursor.execute(f"select * from History where Send = {Id} or Receive ={Id}") - History_database = self.database_cursor.fetchall() - History_data = {"History": History_database} + self.database_cursor.execute(f"select * from History where Send = {Id} or Receive = {Id} and Time > '{date}'") + History_database = self.database_cursor.fetchall() + for History in History_database: + content = { + 'Send': History[0], + 'Receive': History[1], + 'Type': History[2], + 'Content': History[3], + 'Time': History[4].strftime('%Y-%m-%d %H:%M:%S')} + History_data = {"History": content} datas.append(History_data) - for data in datas: - content = {"client_id": Id, "target": "客户端", "genre": "数据更新", "data": data} - self.Process_client_send('Session_client', 'send_client', content) + for data in datas: + time.sleep(0.1) + content = {"client_id": Id, "target": "客户端", "genre": "数据更新", "data": data} + self.Process_client_send('Session_client', 'send_client', content) def Process_client_pick(self, data): if data['target'] in ['ALL', 'Database_formula']: diff --git a/python/test/Server/Transmission/Session_client.py b/python/test/Server/Transmission/Session_client.py index e41cd0d..21054c4 100644 --- a/python/test/Server/Transmission/Session_client.py +++ b/python/test/Server/Transmission/Session_client.py @@ -43,7 +43,7 @@ class link_client(ProcessClient): try: data = {"genre": genre, "target": target, "data": content, "datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - data_json = json.dumps(data) + data_json = json.dumps(data)+'\n' client_socket.send(data_json.encode("utf-8")) except: client_socket.close() diff --git a/python/test/test.py b/python/test/test.py index f4e6289..59bbad0 100644 --- a/python/test/test.py +++ b/python/test/test.py @@ -1,54 +1,5 @@ -import json -import multiprocessing -from multiprocessing.connection import Listener -import threading +import time -class ProcessServer: - def __init__(self): - try: - self.Process_port = 3244 - self.Process_server = 'localhost' - self.Process_server_listener = Listener((self.Process_server, self.Process_port)) - self.Process_client_link_dick = {} - Process_client_link_Thread = threading.Thread(target=self.Process_client_link) - Process_client_link_Thread.start() - except: - print("进程通信端口绑定失败") - - - def Process_client_link(self): - while True: - client_connect = self.Process_server_listener.accept() - client_Thread_recv = threading.Thread(target=self.Process_client_recv, args=(client_connect,)) - client_Thread_recv.start() - - def Process_client_recv(self, client_Thread_recv): - while True: - data_json = client_Thread_recv.recv() - data = json.loads(data_json) - if data['target'] == 'Server': - if data['function'] == 'Name': - self.Process_client_link_dick[data['content']] = client_Thread_recv - else: - self.Process_client_pick(data) - - def Process_client_send(self, target, function, content): - connect = self.Process_client_link_dick[target] - data = {"target": target, "function": function, "content": content} - data_json = json.dumps(data) - connect.send(data_json) - - def Process_client_pick(self, data): - if data['target'] == 'ALL': - for value in self.Process_client_link_dick.values(): - data_json = json.dumps(data) - value.send(data_json) - else: - if data['target'] in self.Process_client_link_dick.keys(): - data_json = json.dumps(data) - self.Process_client_link_dick[data['target']].send(data_json) - - -if __name__ == '__main__': - ProcessServer() \ No newline at end of file +date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(0)) +print(type(date)) \ No newline at end of file