Ciao, sono ancora qui, ho un po' di problemi, ti posto ciò che ho scritto fin'ora:
Codice Che andrà sul client windows XP:
codice:
#!/usr/bin/env python
import wx
import wx.html
import sys
from socket import *
class Frame(wx.Frame):
def __init__(self,s,parent, id, title):
print "Frame __init__"
dlg = wx.MessageDialog(None, 'Procedo con il backup?', 'Caladan Backup Utility', wx.YES_NO | wx.ICON_QUESTION)
result = dlg.ShowModal()
dlg.Destroy()
if(result == wx.ID_YES):
window_width = 300;
window_height = 200;
wx.Frame.__init__(self, parent, id, title, (0,0),(window_width,window_height))
status = self.CreateStatusBar(2, 0, id);
status.SetStatusText('gianiaz.net (C)')
status.SetStatusText('giovanni b lenoci', 1)
panel = wx.Panel(self);
panel.SetBackgroundColour('White')
self.html = wx.html.HtmlWindow(self, -1, pos=wx.DefaultPosition,size=(295, 150))
self.setHTML('prova');
else:
self.Close()
def setHTML(self, html):
self.html.SetPage(html)
def OnCloseMe(self, event):
self.Close(True)
def OnCloseWindow(self, event):
self.Destroy()
class messageReceived(wx.PyCommandEvent):
def __init__(self, evtType, id):
wx.PyCommandEvent.__init__(self, evtType, id)
class App(wx.App):
def __init__(self, s, redirect=True, filename=None):
self.s = s;
print s;
wx.App.__init__(self, redirect, filename)
def OnInit(self):
print "OnInit"
self.frame = Frame(s=self.s, parent=None, id=1, title='Startup')
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def OnExit(self):
print "OnExit"
if __name__ == '__main__':
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
data,addr = UDPSock.recvfrom(buf)
# Receive messages
while 1:
data,addr = UDPSock.recvfrom(buf)
print data
if data:
if(data == 'open') :
opened = True
app = App(redirect=False, filename=None, s=UDPSock)
app.MainLoop()
print 'hai chiuso la finestra'
UDPSock.close()
break
e quello sul server che manderà dei messaggi al client
codice:
#!/usr/bin/env python
import sys
from socket import *
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.sendto('ping',addr)
# Send messages
while (1):
data = raw_input('>> ')
if not data:
break
else:
if(UDPSock.sendto(data,addr)):
print "Sent :",data
# Close socket
UDPSock.close()
Ovviamente il codice è da sistemare, e non va ancora nulla...
Il problema che vorrei risolvere al momento è ricevere il messaggio sulla finestra.
Avevo pensato di mettere una finestra html e far passare dei messaggi.
Ma subito dopo l'init, sembra che i dati non arrivino più (ho provato a mettere un print data).
Probabilmente la mia scarsa conoscenza delle wxpython mi manda in confusione.
Penso che il problema sia che dopo l'init, mi trovo all'interno del Mainloop, quindi non ricevo più i dati.
Come dovrei fare?
Creare un evento che viene scaturito all'arrivo di un messaggio?
In tal caso dove verifico l'arrivo del messaggio?
Mi viene stupidamente da pensare che dovrei far arrivare la socket al mainloop, e da li verificare che sia arrivato qualcosa...
Anche se sono lontano dalla soluzione potete darmi qualche riferimento su cosa studiare per chiudere il cerchio?
ciao e grazie