4jcraft/Minecraft.Client/UI/Screens/ConnectScreen.cpp
2026-03-13 17:10:10 -05:00

94 lines
2.9 KiB
C++

#include "../../Platform/stdafx.h"
#include "ConnectScreen.h"
#include "../../Network/ClientConnection.h"
#include "TitleScreen.h"
#include "../Button.h"
#include "../../Minecraft.h"
#include "../../Player/User.h"
#include "../../../Minecraft.World/Headers/net.minecraft.locale.h"
ConnectScreen::ConnectScreen(Minecraft* minecraft, const std::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(std::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);
}