aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/ConnectScreen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Client/ConnectScreen.cpp')
-rw-r--r--Minecraft.Client/ConnectScreen.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/Minecraft.Client/ConnectScreen.cpp b/Minecraft.Client/ConnectScreen.cpp
new file mode 100644
index 00000000..2cf005b6
--- /dev/null
+++ b/Minecraft.Client/ConnectScreen.cpp
@@ -0,0 +1,95 @@
+#include "stdafx.h"
+#include "ConnectScreen.h"
+#include "ClientConnection.h"
+#include "TitleScreen.h"
+#include "Button.h"
+#include "Minecraft.h"
+#include "User.h"
+#include "..\Minecraft.World\net.minecraft.locale.h"
+
+
+ConnectScreen::ConnectScreen(Minecraft *minecraft, const wstring& ip, int port)
+{
+ aborted = false;
+// System.out.println("Connecting to " + ip + ", " + port);
+ minecraft->setLevel(NULL);
+#if 1
+ // 4J - removed from separate thread, but need to investigate what we actually need here
+ connection = new ClientConnection(minecraft, ip, port);
+ if (aborted) return;
+ connection->send( shared_ptr<PreLoginPacket>( new PreLoginPacket(minecraft->user->name) ) );
+#else
+
+ new Thread() {
+ public void run() {
+
+ try {
+ connection = new ClientConnection(minecraft, ip, port);
+ if (aborted) return;
+ connection.send(new PreLoginPacket(minecraft.user.name));
+ } catch (UnknownHostException e) {
+ if (aborted) return;
+ minecraft.setScreen(new DisconnectedScreen("connect.failed", "disconnect.genericReason", "Unknown host '" + ip + "'"));
+ } catch (ConnectException e) {
+ if (aborted) return;
+ minecraft.setScreen(new DisconnectedScreen("connect.failed", "disconnect.genericReason", e.getMessage()));
+ } catch (Exception e) {
+ if (aborted) return;
+ e.printStackTrace();
+ minecraft.setScreen(new DisconnectedScreen("connect.failed", "disconnect.genericReason", e.toString()));
+ }
+ }
+ }.start();
+#endif
+}
+
+void ConnectScreen::tick()
+{
+ if (connection != NULL)
+ {
+ connection->tick();
+ }
+}
+
+void ConnectScreen::keyPressed(char eventCharacter, int eventKey)
+{
+}
+
+void ConnectScreen::init()
+{
+ Language *language = Language::getInstance();
+
+ buttons.clear();
+ buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 5 + 12, language->getElement(L"gui.cancel")));
+
+}
+
+void ConnectScreen::buttonClicked(Button *button)
+{
+ if (button->id == 0)
+ {
+ aborted = true;
+ if (connection != NULL) connection->close();
+ minecraft->setScreen(new TitleScreen());
+ }
+}
+
+void ConnectScreen::render(int xm, int ym, float a)
+{
+ renderBackground();
+
+ Language *language = Language::getInstance();
+
+ if (connection == NULL)
+ {
+ drawCenteredString(font, language->getElement(L"connect.connecting"), width / 2, height / 2 - 50, 0xffffff);
+ drawCenteredString(font, L"", width / 2, height / 2 - 10, 0xffffff);
+ }
+ else
+ {
+ drawCenteredString(font, language->getElement(L"connect.authorizing"), width / 2, height / 2 - 50, 0xffffff);
+ drawCenteredString(font, connection->message, width / 2, height / 2 - 10, 0xffffff);
+ }
+
+ Screen::render(xm, ym, a);
+} \ No newline at end of file