mirror of
https://github.com/ammaraskar/pyCraft.git
synced 2024-11-16 15:25:12 +01:00
GUI overhaul
This commit is contained in:
parent
1ecdf8e82f
commit
a99b73c5b6
142
GUI.py
Normal file
142
GUI.py
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
import wx
|
||||||
|
import start
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
#pydev error fix
|
||||||
|
wx=wx
|
||||||
|
|
||||||
|
class LoginFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwds):
|
||||||
|
self.loggedIn = False
|
||||||
|
|
||||||
|
# begin wxGlade: LoginFrame.__init__
|
||||||
|
kwds["style"] = wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN
|
||||||
|
wx.Frame.__init__(self, *args, **kwds)
|
||||||
|
self.LoginStaticText = wx.StaticText(self, -1, "Login")
|
||||||
|
self.static_line_1 = wx.StaticLine(self, -1)
|
||||||
|
self.UsernameStaticText = wx.StaticText(self, -1, "Username")
|
||||||
|
self.UsernameEntry = wx.TextCtrl(self, -1, "", style=wx.TE_PROCESS_ENTER)
|
||||||
|
self.PasswordStaticText = wx.StaticText(self, -1, "Password")
|
||||||
|
self.PasswordEntry = wx.TextCtrl(self, -1, "", style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)
|
||||||
|
self.LoginButton = wx.Button(self, -1, "&Login")
|
||||||
|
self.static_line_2 = wx.StaticLine(self, -1)
|
||||||
|
self.Status = wx.StaticText(self, -1, "pyCraft, python based minecraft client by Ammar Askar")
|
||||||
|
|
||||||
|
self.__set_properties()
|
||||||
|
self.__do_layout()
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.handleLogin, self.LoginButton)
|
||||||
|
self.UsernameEntry.Bind(wx.EVT_KEY_DOWN, self.onKeyDown)
|
||||||
|
self.PasswordEntry.Bind(wx.EVT_KEY_DOWN, self.onKeyDown)
|
||||||
|
# end wxGlade
|
||||||
|
|
||||||
|
def __set_properties(self):
|
||||||
|
# begin wxGlade: LoginFrame.__set_properties
|
||||||
|
self.SetTitle("pyCraft")
|
||||||
|
self.SetSize((500, 300))
|
||||||
|
self.SetBackgroundColour(wx.Colour(171, 171, 171))
|
||||||
|
self.SetFont(wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
|
||||||
|
self.LoginStaticText.SetBackgroundColour(wx.Colour(171, 171, 171))
|
||||||
|
self.LoginStaticText.SetFont(wx.Font(65, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, "Minecraft"))
|
||||||
|
self.UsernameStaticText.SetBackgroundColour(wx.Colour(171, 171, 171))
|
||||||
|
self.UsernameStaticText.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, "Lucida Sans"))
|
||||||
|
self.UsernameEntry.SetMinSize((150, 25))
|
||||||
|
self.UsernameEntry.SetFont(wx.Font(12, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, ""))
|
||||||
|
self.PasswordStaticText.SetMinSize((87, 35))
|
||||||
|
self.PasswordStaticText.SetBackgroundColour(wx.Colour(171, 171, 171))
|
||||||
|
self.PasswordStaticText.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, "Lucida Sans"))
|
||||||
|
self.PasswordEntry.SetMinSize((150, 25))
|
||||||
|
self.PasswordEntry.SetFont(wx.Font(12, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, ""))
|
||||||
|
self.LoginButton.SetMinSize((80, 32))
|
||||||
|
self.LoginButton.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))
|
||||||
|
self.LoginButton.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
|
||||||
|
self.Status.SetBackgroundColour(wx.Colour(171, 171, 171))
|
||||||
|
self.Status.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0))
|
||||||
|
# end wxGlade
|
||||||
|
|
||||||
|
def __do_layout(self):
|
||||||
|
# begin wxGlade: LoginFrame.__do_layout
|
||||||
|
sizer_5 = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer_5.Add(self.LoginStaticText, 0, wx.LEFT | wx.TOP, 5)
|
||||||
|
sizer_5.Add((20, 19), 0, 0, 0)
|
||||||
|
sizer_5.Add((20, 48), 0, 0, 0)
|
||||||
|
sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0)
|
||||||
|
sizer_7.Add(self.UsernameStaticText, 0, wx.LEFT, 5)
|
||||||
|
sizer_7.Add(self.UsernameEntry, 0, wx.LEFT, 15)
|
||||||
|
sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
|
||||||
|
sizer_8.Add(self.PasswordStaticText, 0, wx.LEFT, 5)
|
||||||
|
sizer_8.Add(self.PasswordEntry, 0, wx.LEFT, 20)
|
||||||
|
sizer_8.Add(self.LoginButton, 0, wx.LEFT, 145)
|
||||||
|
sizer_5.Add(sizer_8, 1, wx.EXPAND, 0)
|
||||||
|
sizer_5.Add(self.static_line_2, 0, wx.EXPAND, 0)
|
||||||
|
sizer_5.Add(self.Status, 0, wx.LEFT, 5)
|
||||||
|
self.SetSizer(sizer_5)
|
||||||
|
self.Layout()
|
||||||
|
self.Centre()
|
||||||
|
# end wxGlade
|
||||||
|
|
||||||
|
def onKeyDown(self, event):
|
||||||
|
if(event.GetKeyCode() == 9):
|
||||||
|
if(event.GetEventObject() == self.UsernameEntry):
|
||||||
|
self.PasswordEntry.SetFocus()
|
||||||
|
if(event.GetEventObject() == self.PasswordEntry):
|
||||||
|
self.UsernameEntry.SetFocus()
|
||||||
|
else:
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def handlePostLogin(self, threadtokill):
|
||||||
|
threadtokill.Kill = True
|
||||||
|
self.Status.SetLabel("Logged in!") #For now just sets label to logged in, will call new frame in the future
|
||||||
|
pass
|
||||||
|
|
||||||
|
def handleEnter(self):
|
||||||
|
print "mebbe this works"
|
||||||
|
|
||||||
|
def handleLogin(self, event):
|
||||||
|
if(self.UsernameEntry.GetValue() == ""):
|
||||||
|
self.Status.SetForegroundColour(wx.RED)
|
||||||
|
self.Status.SetLabel("Enter a username")
|
||||||
|
return
|
||||||
|
if(self.PasswordEntry.GetValue() == ""):
|
||||||
|
self.Status.SetForegroundColour(wx.RED)
|
||||||
|
self.Status.SetLabel("Enter a password")
|
||||||
|
return
|
||||||
|
username = self.UsernameEntry.GetValue()
|
||||||
|
password = self.PasswordEntry.GetValue()
|
||||||
|
self.Status.SetForegroundColour(wx.BLUE)
|
||||||
|
self.Status.SetLabel("Connecting.")
|
||||||
|
RotationThread = ConnectingRotationThread(self)
|
||||||
|
RotationThread.start()
|
||||||
|
LoginThread = start.MinecraftLoginThread(self, RotationThread, username, password)
|
||||||
|
LoginThread.start()
|
||||||
|
|
||||||
|
class ConnectingRotationThread(threading.Thread):
|
||||||
|
|
||||||
|
def __init__(self, window):
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.window = window
|
||||||
|
self.Kill = False
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
i = 1
|
||||||
|
while True:
|
||||||
|
if(self.Kill == True):
|
||||||
|
break
|
||||||
|
if(i == 0):
|
||||||
|
self.window.Status.SetLabel("Connecting.")
|
||||||
|
if(i == 1):
|
||||||
|
self.window.Status.SetLabel("Connecting..")
|
||||||
|
if(i == 2):
|
||||||
|
self.window.Status.SetLabel("Connecting...")
|
||||||
|
if(i == 3):
|
||||||
|
self.window.Status.SetLabel("Connecting....")
|
||||||
|
if(i == 4):
|
||||||
|
self.window.Status.SetLabel("Connecting.....")
|
||||||
|
i = -1
|
||||||
|
i = i + 1
|
||||||
|
time.sleep(1)
|
||||||
|
|
209
start.py
209
start.py
@ -1,156 +1,26 @@
|
|||||||
import urllib
|
import urllib
|
||||||
import urllib2
|
import urllib2
|
||||||
import getpass
|
import getpass
|
||||||
import socket
|
|
||||||
import sys
|
import sys
|
||||||
import PacketListenerManager
|
|
||||||
import PacketSenderManager
|
import PacketSenderManager
|
||||||
import NetworkManager
|
import NetworkManager
|
||||||
import NoGUIstuff
|
import NoGUIstuff
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
import thread
|
|
||||||
import wx
|
import wx
|
||||||
import wxPython
|
import GUI
|
||||||
|
|
||||||
sessionid = ""
|
#pyDev error fix
|
||||||
username = ""
|
wx=wx
|
||||||
|
|
||||||
#Eclipse pyDev error fix
|
|
||||||
wx = wx
|
|
||||||
|
|
||||||
class Window(wx.Frame):
|
|
||||||
|
|
||||||
def __init__(self, parent, title):
|
|
||||||
self.username = ""
|
|
||||||
self.sessionID = ""
|
|
||||||
self.password = ""
|
|
||||||
self.LoggedIn = False
|
|
||||||
|
|
||||||
super(Window, self).__init__(parent, title=title,
|
|
||||||
size=(400, 100))
|
|
||||||
|
|
||||||
self.initialize()
|
|
||||||
self.Show()
|
|
||||||
|
|
||||||
def initialize(self):
|
|
||||||
|
|
||||||
self.sizer = wx.GridBagSizer()
|
|
||||||
|
|
||||||
self.label = wx.StaticText(self, -1, label=u'Username')
|
|
||||||
self.sizer.Add( self.label, (0,0),(1,1), wx.EXPAND )
|
|
||||||
|
|
||||||
self.entry = wx.TextCtrl(self,-1, size=(200,23))
|
|
||||||
self.sizer.Add(self.entry,(0,1),(1, 4),wx.EXPAND | wx.ALIGN_LEFT)
|
|
||||||
self.Bind(wx.EVT_TEXT_ENTER, self.onPressEnterOnFields, self.entry)
|
|
||||||
|
|
||||||
self.label2 = wx.StaticText(self, -1, label=u'Password')
|
|
||||||
self.sizer.Add( self.label2, (2,0),(1,2), wx.EXPAND)
|
|
||||||
|
|
||||||
self.entry2 = wx.TextCtrl(self, -1, size=(200,23), style = wx.TE_PASSWORD)
|
|
||||||
self.sizer.Add(self.entry2,(2,2),(2,4), wx.EXPAND | wx.ALIGN_LEFT)
|
|
||||||
self.Bind(wx.EVT_TEXT_ENTER, self.onPressEnterOnFields, self.entry2)
|
|
||||||
|
|
||||||
button = wx.Button(self,-1,label="Login")
|
|
||||||
self.sizer.Add(button, (5,0))
|
|
||||||
self.Bind(wx.EVT_BUTTON, self.OnButtonClick, button)
|
|
||||||
|
|
||||||
self.status = wx.StaticText(self, -1,)
|
|
||||||
self.sizer.Add(self.status,(5,2),(5,15), wx.EXPAND)
|
|
||||||
|
|
||||||
self.sizer.AddGrowableCol(0)
|
|
||||||
self.SetSizerAndFit(self.sizer)
|
|
||||||
|
|
||||||
def InitializeServerBrowser(self):
|
|
||||||
|
|
||||||
self.sizer = wx.GridBagSizer()
|
|
||||||
|
|
||||||
#Top label
|
|
||||||
self.topLabel = wx.StaticText(self, -1, label=u'Logged in as ' + self.username + '! (Session id: ' + self.sessionID + ')')
|
|
||||||
self.sizer.Add(self.topLabel, (0,0),(1,1), wx.EXPAND)
|
|
||||||
#Top label
|
|
||||||
|
|
||||||
#Address label
|
|
||||||
self.addressLabel = wx.StaticText(self, -1, label=u'Server address')
|
|
||||||
self.sizer.Add(self.addressLabel, (2,0), (1,2), wx.EXPAND)
|
|
||||||
#Address lable
|
|
||||||
|
|
||||||
#Address entry box
|
|
||||||
self.AddressEntry = wx.TextCtrl(self, -1)
|
|
||||||
self.sizer.Add(self.AddressEntry,(2,2),(2,2), wx.EXPAND)
|
|
||||||
self.Bind(wx.EVT_TEXT_ENTER, self.onConnectClick, self.AddressEntry)
|
|
||||||
#Address entry box
|
|
||||||
|
|
||||||
self.connectbutton = wx.Button(self, -1, label="Connect")
|
|
||||||
self.sizer.Add(self.connectbutton,(4,0))
|
|
||||||
self.Bind(wx.EVT_BUTTON, self.onConnectClick, self.connectbutton)
|
|
||||||
|
|
||||||
self.sizer.AddGrowableCol(0)
|
|
||||||
self.SetSizerAndFit(self.sizer)
|
|
||||||
|
|
||||||
def onConnectClick(self, event):
|
|
||||||
StuffEnteredIntoBox = self.AddressEntry.GetValue()
|
|
||||||
if(StuffEnteredIntoBox == ""):
|
|
||||||
self.topLabel.SetLabel("Logged in as " + self.username + "! Enter a server address")
|
|
||||||
self.sizer.DeleteWindows()
|
|
||||||
self.sizer = wx.GridBagSizer()
|
|
||||||
self.connectStatus = wx.StaticText(self, -1, label=u'Connecting ...')
|
|
||||||
self.connectStatus.SetForegroundColour(wx.BLUE)
|
|
||||||
self.sizer.Add(self.connectStatus, (0,0), (0,0))
|
|
||||||
self.connectStatus.Center()
|
|
||||||
if ':' in StuffEnteredIntoBox:
|
|
||||||
StuffEnteredIntoBox = StuffEnteredIntoBox.split(":")
|
|
||||||
host = StuffEnteredIntoBox[0]
|
|
||||||
port = int(StuffEnteredIntoBox[1])
|
|
||||||
else:
|
|
||||||
host = StuffEnteredIntoBox
|
|
||||||
port = 25565
|
|
||||||
self.connection = NetworkManager.ServerConnection(self, self.username, self.password, self.sessionID, host, port)
|
|
||||||
self.connection.start()
|
|
||||||
|
|
||||||
def OnButtonClick(self, event):
|
|
||||||
if(self.entry.GetValue() == ""):
|
|
||||||
self.status.SetLabel("Enter a username sherlock")
|
|
||||||
return
|
|
||||||
if(self.entry2.GetValue() == ""):
|
|
||||||
self.status.SetLabel("Enter a password you derp")
|
|
||||||
return
|
|
||||||
password = self.entry2.GetValue()
|
|
||||||
username = self.entry.GetValue()
|
|
||||||
self.status.SetForegroundColour(wx.BLUE)
|
|
||||||
self.status.SetLabel("Logging in...")
|
|
||||||
thread = MinecraftLoginThread(self, username, password)
|
|
||||||
thread.start()
|
|
||||||
while(thread.is_alive() == True):
|
|
||||||
pass
|
|
||||||
self.sizer.DeleteWindows()
|
|
||||||
self.InitializeServerBrowser()
|
|
||||||
|
|
||||||
def onPressEnterOnFields(self, event):
|
|
||||||
if(self.entry.GetValue() == ""):
|
|
||||||
self.status.SetLabel("Enter a username sherlock")
|
|
||||||
return
|
|
||||||
if(self.entry2.GetValue() == ""):
|
|
||||||
self.status.SetLabel("Enter a password you derp")
|
|
||||||
return
|
|
||||||
password = self.entry2.GetValue()
|
|
||||||
username = self.entry.GetValue()
|
|
||||||
self.status.SetForegroundColour(wx.BLUE)
|
|
||||||
self.status.SetLabel("Logging in...")
|
|
||||||
thread = MinecraftLoginThread(self, username, password)
|
|
||||||
thread.start()
|
|
||||||
while(thread.is_alive() == True):
|
|
||||||
pass
|
|
||||||
self.sizer.DeleteWindows()
|
|
||||||
self.InitializeServerBrowser()
|
|
||||||
|
|
||||||
class MinecraftLoginThread(threading.Thread):
|
class MinecraftLoginThread(threading.Thread):
|
||||||
|
|
||||||
def __init__(self, window, username, password):
|
def __init__(self, window, rotationthread, username, password):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.window = window
|
|
||||||
self.username = username
|
self.username = username
|
||||||
self.password = password
|
self.password = password
|
||||||
|
self.window = window
|
||||||
|
self.rotationthread = rotationthread
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
url = 'https://login.minecraft.net'
|
url = 'https://login.minecraft.net'
|
||||||
@ -165,20 +35,23 @@ class MinecraftLoginThread(threading.Thread):
|
|||||||
response = opener.open(req)
|
response = opener.open(req)
|
||||||
response = response.read()
|
response = response.read()
|
||||||
except urllib2.URLError:
|
except urllib2.URLError:
|
||||||
popup = wx.MessageBox('Connection to minecraft.net failed', 'Warning',
|
self.rotationthread.Kill = True
|
||||||
wx.OK | wx.ICON_ERROR)
|
self.window.Status.SetForegroundColour(wx.RED)
|
||||||
popup.ShowModal()
|
self.window.Status.SetLabel('Connection to minecraft.net failed')
|
||||||
return
|
return
|
||||||
if(response == "Bad login"):
|
if(response == "Bad login"):
|
||||||
self.window.status.SetForegroundColour(wx.RED)
|
self.rotationthread.Kill = True
|
||||||
self.window.status.SetLabel("Incorrect username or password!")
|
self.window.Status.SetForegroundColour(wx.RED)
|
||||||
|
self.window.Status.SetLabel('Incorrect username or password')
|
||||||
return
|
return
|
||||||
response = response.split(":")
|
response = response.split(":")
|
||||||
self.window.username = response[2]
|
username = response[2]
|
||||||
self.window.password = self.password
|
sessionID = response[3]
|
||||||
self.window.sessionID = response[3]
|
|
||||||
self.window.LoggedIn = True
|
|
||||||
KeepConnectionAlive(self.username, self.password).start()
|
KeepConnectionAlive(self.username, self.password).start()
|
||||||
|
self.window.username = username
|
||||||
|
self.window.sessionID = sessionID
|
||||||
|
self.window.loggedIn = True
|
||||||
|
self.window.handlePostLogin(self.rotationthread)
|
||||||
|
|
||||||
class KeepConnectionAlive(threading.Thread):
|
class KeepConnectionAlive(threading.Thread):
|
||||||
|
|
||||||
@ -229,46 +102,8 @@ if __name__ == "__main__":
|
|||||||
raw_input()
|
raw_input()
|
||||||
PacketSenderManager.send03(connection.grabSocket(), "/report Test report from pyCraft, hope this works :3")
|
PacketSenderManager.send03(connection.grabSocket(), "/report Test report from pyCraft, hope this works :3")
|
||||||
else:
|
else:
|
||||||
app = wx.App(0)
|
app = wx.PySimpleApp(0)
|
||||||
Window(None, title='pyCraft')
|
Login = GUI.LoginFrame(None, -1, "")
|
||||||
|
app.SetTopWindow(Login)
|
||||||
|
Login.Show()
|
||||||
app.MainLoop()
|
app.MainLoop()
|
||||||
|
|
||||||
"""
|
|
||||||
url = 'https://login.minecraft.net'
|
|
||||||
header = {'Content-Type' : 'application/x-www-form-urlencoded'}
|
|
||||||
username = raw_input("Enter your username: ")
|
|
||||||
password = getpass.getpass("Enter your password: ")
|
|
||||||
data = {'user' : username,
|
|
||||||
'password' : password,
|
|
||||||
'version' : '13'}
|
|
||||||
data = urllib.urlencode(data)
|
|
||||||
req = urllib2.Request(url, data, header)
|
|
||||||
opener = urllib2.build_opener()
|
|
||||||
response = opener.open(req)
|
|
||||||
response = response.read()
|
|
||||||
response = response.split(":")
|
|
||||||
sessionid = response[3]
|
|
||||||
print "Your session id is: " + sessionid
|
|
||||||
mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
|
|
||||||
host = raw_input("Please enter host: ");
|
|
||||||
port = raw_input("Please enter port (return for 25565): ");
|
|
||||||
if(port == ""):
|
|
||||||
port = 25565
|
|
||||||
else:
|
|
||||||
port = int(port)
|
|
||||||
mySocket.connect ( ( host, port ) )
|
|
||||||
PacketManager.sendString("\x02", username + host + ":" + str(port), mySocket)
|
|
||||||
response = PacketManager.readStringFromSocket(mySocket)
|
|
||||||
print "Server id is: " + response['string']
|
|
||||||
serverid = response['string']
|
|
||||||
url = "http://session.minecraft.net/game/joinserver.jsp?user=" + username + "&sessionId=" + sessionid + "&serverId=" + serverid
|
|
||||||
response = urllib2.urlopen(url).read()
|
|
||||||
print "Response: " + response
|
|
||||||
if(response != "OK"):
|
|
||||||
print "OH GOD RESPONSE IS NOT OK. QUITING NOW."
|
|
||||||
sys.exit()
|
|
||||||
PacketManager.sendLoginRequest(mySocket, username)
|
|
||||||
while True:
|
|
||||||
PacketManager.handleIncomingPacket(mySocket)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user