void ListServer_Connect() { if ( serverRunning == false ) return; if ( setSock == false ) { setSock = true; listServer.setDescription( "listserver" ); listServer.setProtocol( SOCKET_PROTOCOL_TCP ); listServer.setType( SOCKET_TYPE_CLIENT ); listServer.setOptions( SOCKET_OPTION_NONBLOCKING ); } CString ip(findKey("listip")), port(findKey("listport")); listServer.init( ip, port ); int val = listServer.connect(); if (val == 0 || val == SOCKET_ALREADY_CONNECTED) lsConnected = true; else lsConnected = false; if ( !lsConnected ) { errorOut("errorlog.txt", CBuffer() << "Unable to connect to list server.", true); listServer.disconnect(); return; } errorOut("serverlog.txt", CBuffer() << "Connected to the list server successfully.", true); // Send the ServerHQ password. CPacket pack; pack << (char)SLSSERVERHQPASS << serverhq_pass << "\n"; // assemble server packet. pack << (char)SLSNEWSERVER << (char)listServerFields[0].length() << listServerFields[0]; pack << (char)listServerFields[1].length() << listServerFields[1]; pack << (char)listServerFields[2].length() << listServerFields[2]; pack << (char)listServerFields[3].length() << listServerFields[3]; pack << (char)listServerFields[4].length() << listServerFields[4]; pack << (char)listServerFields[5].length() << listServerFields[5]; pack << (char)serverPort.length() << serverPort; if (localip == CString("AUTO")) { CString slocalip(listServer.getLocalIp()); if (slocalip == CString("127.0.1.1") || slocalip == CString("127.0.0.1")) { errorOut("serverlog.txt", CBuffer() << "[WARNING] Socket returned " << slocalip << " for its local ip! Not sending local ip to serverlist.", true); pack << (char)0; } else pack << (char)slocalip.length() << slocalip; } else pack << (char)localip.length() << localip; pack << "\n"; // Send the ServerHQ level. pack << (char)SLSSERVERHQLEVEL << (char)serverhq_level << "\n"; // send gserver info to listserver ListServer_Send(pack); // send players to listserver CPacket pPacket; for (int i = 0; i < playerList.count(); i++) { CPlayer *player = (CPlayer *)playerList[i]; pPacket << (char)player->accountName.length() << player->accountName << player->getProp(NICKNAME) << player->getProp(CURLEVEL) << player->getProp(PLAYERX) << player->getProp(PLAYERY) << player->getProp(PALIGNMENT) << (char)(1 << player->type); } ListServer_Send(CPacket() << (char)SLSCOUNT << (char)playerList.count() << pPacket << "\n"); }