Commit 07ac78c6 authored by nanahira's avatar nanahira

Merge branch 'patch-srv-withport' of ../versions/ygopro-fh

parents cb476a2e 757e3990
...@@ -4425,8 +4425,13 @@ bool DuelClient::LookupSRV(char *hostname, HostResult* result) { ...@@ -4425,8 +4425,13 @@ bool DuelClient::LookupSRV(char *hostname, HostResult* result) {
return true; return true;
} }
HostResult DuelClient::ParseHost(char *hostname) { HostResult DuelClient::ParseHost(char *hostname, unsigned short port) {
HostResult result; HostResult result;
if(port) {
result.host = LookupHost(hostname);
result.port = port;
return result;
}
unsigned int tryAddress = htonl(inet_addr(hostname)); unsigned int tryAddress = htonl(inet_addr(hostname));
if(tryAddress != -1) { if(tryAddress != -1) {
result.host = tryAddress; result.host = tryAddress;
......
...@@ -97,7 +97,7 @@ public: ...@@ -97,7 +97,7 @@ public:
static void SendResponse(); static void SendResponse();
static unsigned int LookupHost(char *host); static unsigned int LookupHost(char *host);
static bool LookupSRV(char *hostname, HostResult *result); static bool LookupSRV(char *hostname, HostResult *result);
static HostResult ParseHost(char *hostname); static HostResult ParseHost(char *hostname, unsigned short port);
static void SendPacketToServer(unsigned char proto) { static void SendPacketToServer(unsigned char proto) {
char* p = duel_client_write; char* p = duel_client_write;
BufferIO::WriteInt16(p, 1); BufferIO::WriteInt16(p, 1);
......
...@@ -201,8 +201,10 @@ bool Game::Initialize() { ...@@ -201,8 +201,10 @@ bool Game::Initialize() {
lstHostList->setItemHeight(18); lstHostList->setItemHeight(18);
btnLanRefresh = env->addButton(rect<s32>(240, 325, 340, 350), wLanWindow, BUTTON_LAN_REFRESH, dataManager.GetSysString(1217)); btnLanRefresh = env->addButton(rect<s32>(240, 325, 340, 350), wLanWindow, BUTTON_LAN_REFRESH, dataManager.GetSysString(1217));
env->addStaticText(dataManager.GetSysString(1221), rect<s32>(10, 360, 220, 380), false, false, wLanWindow); env->addStaticText(dataManager.GetSysString(1221), rect<s32>(10, 360, 220, 380), false, false, wLanWindow);
ebJoinHost = env->addEditBox(gameConf.lasthost, rect<s32>(110, 355, 420, 380), true, wLanWindow); ebJoinHost = env->addEditBox(gameConf.lasthost, rect<s32>(110, 355, 350, 380), true, wLanWindow);
ebJoinHost->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebJoinHost->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebJoinPort = env->addEditBox(gameConf.lastport, rect<s32>(360, 355, 420, 380), true, wLanWindow);
ebJoinPort->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1222), rect<s32>(10, 390, 220, 410), false, false, wLanWindow); env->addStaticText(dataManager.GetSysString(1222), rect<s32>(10, 390, 220, 410), false, false, wLanWindow);
ebJoinPass = env->addEditBox(gameConf.roompass, rect<s32>(110, 385, 420, 410), true, wLanWindow); ebJoinPass = env->addEditBox(gameConf.roompass, rect<s32>(110, 385, 420, 410), true, wLanWindow);
ebJoinPass->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebJoinPass->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
...@@ -1399,11 +1401,8 @@ bool Game::LoadConfigFromFile(const char* file) { ...@@ -1399,11 +1401,8 @@ bool Game::LoadConfigFromFile(const char* file) {
} else if(!strcmp(strbuf, "lasthost")) { } else if(!strcmp(strbuf, "lasthost")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.lasthost, 100); BufferIO::CopyWStr(wstr, gameConf.lasthost, 100);
} else if(!strcmp(strbuf, "lastport")) { // for config migration } else if(!strcmp(strbuf, "lastport")) {
BufferIO::DecodeUTF8(valbuf, wstr); gameConf.lastport = (unsigned short)atoi(valbuf);
wchar_t tmpLastHost[100];
BufferIO::CopyWStr(gameConf.lasthost, tmpLastHost, 100);
myswprintf(gameConf.lasthost, L"%ls:%ls", tmpLastHost, wstr);
} else if(!strcmp(strbuf, "roompass")) { } else if(!strcmp(strbuf, "roompass")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.roompass, 20); BufferIO::CopyWStr(wstr, gameConf.roompass, 20);
...@@ -1527,6 +1526,7 @@ void Game::LoadConfig() { ...@@ -1527,6 +1526,7 @@ void Game::LoadConfig() {
gameConf.numfont[0] = 0; gameConf.numfont[0] = 0;
gameConf.textfont[0] = 0; gameConf.textfont[0] = 0;
gameConf.lasthost[0] = 0; gameConf.lasthost[0] = 0;
gameConf.lastport = 0;
gameConf.roompass[0] = 0; gameConf.roompass[0] = 0;
//settings //settings
gameConf.chkMAutoPos = 0; gameConf.chkMAutoPos = 0;
...@@ -1661,6 +1661,8 @@ void Game::SaveConfig() { ...@@ -1661,6 +1661,8 @@ void Game::SaveConfig() {
fprintf(fp, "serverport = %d\n", gameConf.serverport); fprintf(fp, "serverport = %d\n", gameConf.serverport);
BufferIO::EncodeUTF8(gameConf.lasthost, linebuf); BufferIO::EncodeUTF8(gameConf.lasthost, linebuf);
fprintf(fp, "lasthost = %s\n", linebuf); fprintf(fp, "lasthost = %s\n", linebuf);
BufferIO::EncodeUTF8(gameConf.lastport, linebuf);
fprintf(fp, "lastport = %s\n", linebuf);
//settings //settings
fprintf(fp, "automonsterpos = %d\n", (chkMAutoPos->isChecked() ? 1 : 0)); fprintf(fp, "automonsterpos = %d\n", (chkMAutoPos->isChecked() ? 1 : 0));
fprintf(fp, "autospellpos = %d\n", (chkSTAutoPos->isChecked() ? 1 : 0)); fprintf(fp, "autospellpos = %d\n", (chkSTAutoPos->isChecked() ? 1 : 0));
......
...@@ -19,6 +19,7 @@ struct Config { ...@@ -19,6 +19,7 @@ struct Config {
unsigned short serverport; unsigned short serverport;
unsigned char textfontsize; unsigned char textfontsize;
wchar_t lasthost[100]; wchar_t lasthost[100];
unsigned short lastport;
wchar_t nickname[20]; wchar_t nickname[20];
wchar_t gamename[20]; wchar_t gamename[20];
wchar_t lastcategory[64]; wchar_t lastcategory[64];
...@@ -361,6 +362,7 @@ public: ...@@ -361,6 +362,7 @@ public:
irr::gui::IGUIListBox* lstHostList; irr::gui::IGUIListBox* lstHostList;
irr::gui::IGUIButton* btnLanRefresh; irr::gui::IGUIButton* btnLanRefresh;
irr::gui::IGUIEditBox* ebJoinHost; irr::gui::IGUIEditBox* ebJoinHost;
irr::gui::IGUIEditBox* ebJoinPort;
irr::gui::IGUIEditBox* ebJoinPass; irr::gui::IGUIEditBox* ebJoinPass;
irr::gui::IGUIButton* btnJoinHost; irr::gui::IGUIButton* btnJoinHost;
irr::gui::IGUIButton* btnJoinCancel; irr::gui::IGUIButton* btnJoinCancel;
......
...@@ -77,6 +77,7 @@ int main(int argc, char* argv[]) { ...@@ -77,6 +77,7 @@ int main(int argc, char* argv[]) {
bool keep_on_return = false; bool keep_on_return = false;
bool deckCategorySpecified = false; bool deckCategorySpecified = false;
bool portSpecified = false;
for(int i = 1; i < wargc; ++i) { for(int i = 1; i < wargc; ++i) {
if(wargv[i][0] == L'-' && wargv[i][1] == L'e' && wargv[i][2] != L'\0') { if(wargv[i][0] == L'-' && wargv[i][1] == L'e' && wargv[i][2] != L'\0') {
ygo::dataManager.LoadDB(&wargv[i][2]); ygo::dataManager.LoadDB(&wargv[i][2]);
...@@ -95,17 +96,23 @@ int main(int argc, char* argv[]) { ...@@ -95,17 +96,23 @@ int main(int argc, char* argv[]) {
continue; continue;
} else if(!wcscmp(wargv[i], L"-h")) { // Host address } else if(!wcscmp(wargv[i], L"-h")) { // Host address
++i; ++i;
if(i < wargc) if(i < wargc) {
ygo::mainGame->ebJoinHost->setText(wargv[i]); ygo::mainGame->ebJoinHost->setText(wargv[i]);
if(!portSpecified)
ygo::mainGame->ebJoinPort->setText(L"");
}
continue; continue;
} else if(!wcscmp(wargv[i], L"-p")) { // host port, deprecated, and should use 1.1.1.1:7911 instead } else if(!wcscmp(wargv[i], L"-p")) { // host Port
++i; ++i;
if(i < wargc) { if(i < wargc) {
auto host = ygo::mainGame->ebJoinHost->getText(); portSpecified = true;
if(wcslen(host) > 0) { auto port = _wtoi(wargv[i]);
wchar_t appended[100]; if(port) {
myswprintf(appended, L"%ls:%ls", host, wargv[i]); wchar_t portStr[6];
ygo::mainGame->ebJoinHost->setText(appended); myswprintf(portStr, L"%d", port);
ygo::mainGame->ebJoinPort->setText(portStr);
} else {
ygo::mainGame->ebJoinPort->setText(L"");
} }
} }
continue; continue;
......
...@@ -68,7 +68,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -68,7 +68,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
char hostname[100]; char hostname[100];
const wchar_t* pstr = mainGame->ebJoinHost->getText(); const wchar_t* pstr = mainGame->ebJoinHost->getText();
BufferIO::CopyWStr(pstr, hostname, 100); BufferIO::CopyWStr(pstr, hostname, 100);
HostResult remote = DuelClient::ParseHost(hostname); auto port = (unsigned short)_wtoi(mainGame->ebJoinPort->getText());
HostResult remote = DuelClient::ParseHost(hostname, port);
if(!remote.isValid()) { if(!remote.isValid()) {
mainGame->gMutex.lock(); mainGame->gMutex.lock();
soundManager.PlaySoundEffect(SOUND_INFO); soundManager.PlaySoundEffect(SOUND_INFO);
...@@ -81,6 +82,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -81,6 +82,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break; break;
} }
BufferIO::CopyWStr(pstr, mainGame->gameConf.lasthost, 100); BufferIO::CopyWStr(pstr, mainGame->gameConf.lasthost, 100);
mainGame->gameConf.lastport = port;
if(DuelClient::StartClient(remote.host, remote.port, false)) { if(DuelClient::StartClient(remote.host, remote.port, false)) {
mainGame->btnCreateHost->setEnabled(false); mainGame->btnCreateHost->setEnabled(false);
mainGame->btnJoinHost->setEnabled(false); mainGame->btnJoinHost->setEnabled(false);
...@@ -484,9 +486,11 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -484,9 +486,11 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
} }
int addr = DuelClient::hosts[sel].ipaddr; int addr = DuelClient::hosts[sel].ipaddr;
int port = DuelClient::hosts[sel].port; int port = DuelClient::hosts[sel].port;
wchar_t buf[26]; wchar_t buf[20];
myswprintf(buf, L"%d.%d.%d.%d:%d", addr & 0xff, (addr >> 8) & 0xff, (addr >> 16) & 0xff, (addr >> 24) & 0xff, port); myswprintf(buf, L"%d.%d.%d.%d", addr & 0xff, (addr >> 8) & 0xff, (addr >> 16) & 0xff, (addr >> 24) & 0xff);
mainGame->ebJoinHost->setText(buf); mainGame->ebJoinHost->setText(buf);
myswprintf(buf, L"%d", port);
mainGame->ebJoinPort->setText(buf);
break; break;
} }
case LISTBOX_REPLAY_LIST: { case LISTBOX_REPLAY_LIST: {
......
...@@ -12,7 +12,8 @@ lastdeck = new ...@@ -12,7 +12,8 @@ lastdeck = new
textfont = ./fonts/simhei.ttf 14 textfont = ./fonts/simhei.ttf 14
numfont = ./fonts/arial.ttf numfont = ./fonts/arial.ttf
serverport = 7911 serverport = 7911
lasthost = 127.0.0.1:7911 lasthost = 127.0.0.1
lastport = 0
automonsterpos = 0 automonsterpos = 0
autospellpos = 0 autospellpos = 0
randompos = 0 randompos = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment