From: Malte Bublitz Date: Tue, 12 Feb 2013 20:55:11 +0000 (+0100) Subject: Added gui client. X-Git-Url: https://git.rt3x.de/?a=commitdiff_plain;h=485d8ecb7d8c1ec5431625791d97732ce23cacd4;p=simple-chat.git Added gui client. --- diff --git a/client.py b/client.py index 03bbb0d..a0bb6c7 100644 --- a/client.py +++ b/client.py @@ -43,24 +43,85 @@ class ChatClient(object): return False -import thread +import threading import time import select, sys +import wx -def autoRecv(): - while True: - chat.recv() +class SimpleChatFrame(wx.Frame): + def __init__(self, *args, **kwds): + wx.Frame.__init__(self, *args, **kwds) + # Menu Bar + self.frame_1_menubar = wx.MenuBar() + wxglade_tmp_menu = wx.Menu() + menu_quit = wxglade_tmp_menu.Append(wx.NewId(), "Quit", "", wx.ITEM_NORMAL) + self.Bind(wx.EVT_MENU, self.OnQuit, menu_quit) + self.frame_1_menubar.Append(wxglade_tmp_menu, "SimpleChat") + self.SetMenuBar(self.frame_1_menubar) + # Menu Bar end + self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE) + self.text_ctrl_2 = wx.TextCtrl(self, -1, "") + self.button_1 = wx.Button(self, -1, "Senden.") + self.SetTitle("SimpleChat") + self.SetSize((400, 200)) + self.text_ctrl_1.SetMinSize((400, 140)) + self.text_ctrl_2.SetMinSize((290, -1)) + self.button_1.SetMinSize((114, 32)) + sizer_1 = wx.BoxSizer(wx.VERTICAL) + sizer_2 = wx.BoxSizer(wx.HORIZONTAL) + sizer_1.Add(self.text_ctrl_1, 0, wx.ALL | wx.EXPAND, 0) + sizer_2.Add(self.text_ctrl_2, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 0) + sizer_2.Add(self.button_1, 0, wx.ALIGN_RIGHT, 0) + sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) + self.SetSizer(sizer_1) + self.Layout() + self.Bind(wx.EVT_BUTTON, self.OnSend, self.button_1) + self.chat = ChatClient('127.0.0.1', 7070) + self.chat.name(sys.argv[1]) + self.chat.enter() + self.my_worker1 = RecvThread(self) + self.my_worker1.start() + self.my_worker2 = RetrieveThread(self) + self.my_worker2.start() + + def OnSend(self, ev): + self.chat.all(self.text_ctrl_2.GetValue()) + self.text_ctrl_2.SetValue("") + + def OnQuit(self, ev): + self.chat.exit() + self.Close() + +class RecvThread(threading.Thread): + def __init__(self, parent): + threading.Thread.__init__(self) + self.parent = parent + + def run(self): + while True: + self.parent.chat.recv() -chat = ChatClient('127.0.0.1', 7070) -chat.name("Client") -chat.enter() -chat.all("Hi!") -chat.one("malte70", "Hello, Malte.") -while True: - x = chat.retrieve() - if x != False: - print x - if select.select([sys.stdin,],[],[],0.0)[0]: - chat.send(sys.stdin.readline()) +class RetrieveThread(threading.Thread): + def __init__(self, parent): + threading.Thread.__init__(self) + self.parent = parent + + def run(self): + while True: + x = self.parent.chat.retrieve() + if x != False: + self.parent.text_ctrl_1.AppendText(x.rstrip("\n")+"\n") -chat.exit() +#chat.exit() +if __name__ == "__main__": + app = wx.PySimpleApp(0) + wx.InitAllImageHandlers() + frame_1 = SimpleChatFrame(None, -1, "") + app.SetTopWindow(frame_1) + frame_1.Show() + #while True: + # x = frame_1.chat.retrieve() + # if x != False: + # #self.parent.text_ctrl_1.AppendText(x+"\n") + # print x + app.MainLoop() diff --git a/server.py b/server.py index a4e143e..1857397 100644 --- a/server.py +++ b/server.py @@ -37,7 +37,7 @@ class ChatProtocol(LineReceiver): def broadcastLine(self, line): for client in self.factory.users.itervalues(): - client.sendLine(line) + client.sendLine(line.strip()) factory = Factory() factory.protocol = ChatProtocol