void CallServerIPInputBox(POINT ptClientWorld) { LusInputMsg Msg; Msg.hWnd = ghWndMain; Msg.Title = L"IP 주소 입력"; Msg.Msg = L"\n서버의 IP 주소를 입력해주세요.\n아무것도 입력하지 않으면\n루프백 주소가 입력됩니다."; Msg.MsgStartPos = ptClientWorld; Msg.thisClass = nullptr; Msg.InputMax = 16; Msg.InputSize = 100; Msg.IsOnlyUseNum = false; Msg.MsgSize = { 0, 0, 300, DEFAULT_MSGHEIGHT }; Msg.resultFunc = [](void* Class, LPWSTR str) { close_LusMsgProc(); string serverIP("127.0.0.1"); if (lstrlen(str) > 0) { wstring wstr = str; wstring p1, p2, p3, p4; auto p = wstr.begin(); bool bInvalidIP = false; for (; p != wstr.end() && *p != '.' && p1.length() < 4; ++p) p1 += *p; if (p1.length() >= 4 || to_wstring(stoi(p1)) != p1) bInvalidIP = true; else ++p; if (!bInvalidIP) { for (; p != wstr.end() && *p != '.' && p2.length() < 4; ++p) p2 += *p; if (p2.length() >= 4 || to_wstring(stoi(p2)) != p2) bInvalidIP = true; else ++p; if (!bInvalidIP) { for (; p != wstr.end() && *p != '.' && p3.length() < 4; ++p) p3 += *p; if (p3.length() >= 4 || to_wstring(stoi(p3)) != p3) bInvalidIP = true; else ++p; if (!bInvalidIP) { for (; p != wstr.end() && *p != '.' && p4.length() < 4; ++p) p4 += *p; if (p4.length() >= 4 || to_wstring(stoi(p4)) != p4) bInvalidIP = true; } } } if (bInvalidIP) { // 데스크톱 윈도우 사이즈 RECT getWinSize; GetWindowRect(GetDesktopWindow(), &getWinSize); // 클라이언트 사이즈 RECT rc; rc.left = rc.top = 0; rc.right = CLIENT_WIDTH; rc.bottom = CLIENT_HEIGHT; AdjustWindowRect(&rc, WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_BORDER, FALSE); // 클라이언트 절대좌표(left, top) POINT ptClientWorld; ptClientWorld.x = (getWinSize.right - CLIENT_WIDTH) / 2; ptClientWorld.y = (getWinSize.bottom - CLIENT_HEIGHT) / 2; wsprintf(Lus_strMsg, L"\n잘못된 주소입니다."); LusMsg Msg; Msg.hWnd = ghWndMain; Msg.Title = L"실패"; Msg.Msg = Lus_strMsg; Msg.MsgStartPos = ptClientWorld; Msg.InBoxMsg_1 = L"확인"; Msg.thisClass = nullptr; Msg.Msg_1_Func = [](void* Class) { close_LusMsgProc(); // 데스크톱 윈도우 사이즈 RECT getWinSize; GetWindowRect(GetDesktopWindow(), &getWinSize); // 클라이언트 사이즈 RECT rc; rc.left = rc.top = 0; rc.right = CLIENT_WIDTH; rc.bottom = CLIENT_HEIGHT; AdjustWindowRect(&rc, WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_BORDER, FALSE); // 클라이언트 절대좌표(left, top) POINT ptClientWorld; ptClientWorld.x = (getWinSize.right - CLIENT_WIDTH) / 2; ptClientWorld.y = (getWinSize.bottom - CLIENT_HEIGHT) / 2; CallServerIPInputBox(ptClientWorld); }; LusMsgBox(Msg.hWnd, Msg, hInst, 175); return; } else serverIP = string(to_string(stoi(p1)) + '.' + to_string(stoi(p2)) + '.' + to_string(stoi(p3)) + '.' + to_string(stoi(p4))); } SetServerIP(serverIP); // 소켓 통신 스레드 생성 CreateThread(NULL, 0, ServerMain, NULL, 0, NULL); Sleep(100); }; Msg.undoFunc = [](void* Class) { close_LusMsgProc(); DestroyWindow(ghWndMain); }; LusInputMsgBox(Msg.hWnd, Msg, hInst, 175); }
int ClientNetwork::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: packetReceived(); break; case 1: packetCorrupted(); break; case 2: pingUpdated((*reinterpret_cast< quint32(*)>(_a[1]))); break; case 3: chatReceived((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3])),(*reinterpret_cast< ENUM_TYPE(*)>(_a[4]))); break; case 4: serverInformationsChanged((*reinterpret_cast< ServerInformations(*)>(_a[1]))); break; case 5: clientIDChanged((*reinterpret_cast< CLID(*)>(_a[1]))); break; case 6: nicknameChanged((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 7: error((*reinterpret_cast< ENUM_TYPE(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 8: clientVoted((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< CLID(*)>(_a[2]))); break; case 9: newGameMaster((*reinterpret_cast< CLID(*)>(_a[1]))); break; case 10: serverName((*reinterpret_cast< QString(*)>(_a[1]))); break; case 11: motdChanged((*reinterpret_cast< QString(*)>(_a[1]))); break; case 12: gameLaunched(); break; case 13: narrationChanged((*reinterpret_cast< QString(*)>(_a[1]))); break; case 14: mapChanged((*reinterpret_cast< MapPtr(*)>(_a[1]))); break; case 15: mapFlare((*reinterpret_cast< QPoint(*)>(_a[1])),(*reinterpret_cast< CLID(*)>(_a[2]))); break; case 16: scriptToGMMsg((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 17: scriptToOwnerMsg((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 18: scriptActionMsg((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 19: scriptToPlayerMsg((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 20: scriptMsg((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 21: scriptError((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 22: updateEntities((*reinterpret_cast< const QList<EntityInformations>(*)>(_a[1]))); break; case 23: updateEntity((*reinterpret_cast< const EntityInformations(*)>(_a[1]))); break; case 24: entityDeleted((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 25: scriptReceived((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 26: ressourcesUpdated((*reinterpret_cast< const QMap<QString,RSID>(*)>(_a[1]))); break; case 27: connectionEtablished(); break; case 28: connectionLost(); break; case 29: diceRolled((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< quint16(*)>(_a[2])),(*reinterpret_cast< quint16(*)>(_a[3]))); break; case 30: sanctionned((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< ENUM_TYPE(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3]))); break; case 31: clientJoined((*reinterpret_cast< CLID(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 32: clientLeft((*reinterpret_cast< CLID(*)>(_a[1]))); break; case 33: playSound((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 34: syncLibs((*reinterpret_cast< QList<SoundLibInformations>(*)>(_a[1]))); break; case 35: syncLanguagesList((*reinterpret_cast< QList<QPair<QString,QString> >(*)>(_a[1]))); break; case 36: syncDictionariesList((*reinterpret_cast< QStringList(*)>(_a[1]))); break; case 37: syncScriptList((*reinterpret_cast< QStringList(*)>(_a[1]))); break; case 38: updateCharacterList((*reinterpret_cast< const QStringList(*)>(_a[1]))); break; case 39: send((*reinterpret_cast< Packet*(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break; case 40: send((*reinterpret_cast< Packet*(*)>(_a[1]))); break; case 41: send((*reinterpret_cast< Packet(*)>(_a[1]))); break; case 42: send((*reinterpret_cast< qint32(*)>(_a[1])),(*reinterpret_cast< const QByteArray(*)>(_a[2]))); break; case 43: ping(); break; case 44: { qint32 _r = getPing(); if (_a[0]) *reinterpret_cast< qint32*>(_a[0]) = _r; } break; case 45: { QString _r = serverIP(); if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; case 46: { quint16 _r = serverPort(); if (_a[0]) *reinterpret_cast< quint16*>(_a[0]) = _r; } break; case 47: flush(); break; case 48: connection(); break; case 49: disconnection(); break; case 50: { bool _r = setServer((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< quint16(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 51: connected(); break; case 52: disconnected(); break; case 53: dataReceived(); break; case 54: socketError((*reinterpret_cast< QAbstractSocket::SocketError(*)>(_a[1]))); break; case 55: operatePacket((*reinterpret_cast< Packet*(*)>(_a[1]))); break; default: ; } _id -= 56; } return _id; }