int main(int argc, char* argv[]) { WSADATA Ws; if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; return -1; } CSocket mysocket; if ( false == mysocket.init() ) { cout<<"Create Socket Failed!"<<endl; return -1; } if ( false == mysocket.connect(AF_INET, IP_ADDRESS, PORT) ) { cout<<"Connect Failed!"<<endl; return -1; } else { cout<<"Connect Success!"<<endl; } //SOCKET clientSocket = mysocket.accept_connect(); ThreadPool threadPool(1); threadPool.Call(&DoJob); fd_set fdread; int ret; while(true) { // FD_ZERO(&fdread); // FD_SET(mysocket.get_sock(), &fdread); // if (SOCKET_ERROR == (ret = select(0, &fdread, NULL, NULL, NULL))) // { // continue; // } // // if (ret > 0) // { // if (FD_ISSET(mysocket.get_sock(), &fdread)) // { // // } // } } WSACleanup(); return 0; }
void ListServer_Connect() { if ((lsConnected = listServer.connect(findKey("listip"), atoi(findKey("listport")))) == false) { errorOut("rclog.txt", "Unable to connect to list server", true); return; } errorOut("rclog.txt", "Connected to the list server successfully\n", true); listServer.setSync(false); // send gserver info to listserver ListServer_Send(CPacket() << (char)SLSNAME << listServerFields[0] << "\n" << (char)SLSDESC << listServerFields[1] << "\n" << (char)SLSLANG << listServerFields[2] << "\n" << (char)SLSVER << listServerFields[3] << "\n" << (char)SLSURL << listServerFields[4] << "\n" << (char)SLSIP << listServerFields[5] << "\n" << (char)SLSPORT << toString(serverPort) << "\n"); // 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)player->type; } ListServer_Send(CPacket() << (char)SLSCOUNT << (char)playerList.count() << pPacket << "\n"); }
int main(int argc, char *argv[]) { #ifdef PSPSDK pspDebugScreenInit(); SetupCallbacks(); #else // Shut down the server if we get a kill signal. signal( SIGINT, (sighandler_t) shutdownServer ); signal( SIGTERM, (sighandler_t) shutdownServer ); #endif /* Setup Data-Directory */ dataDir = CBuffer(argv[0]).replaceAll("\\", "/"); dataDir = dataDir.copy(0, dataDir.findl('/') + 1); programDir = dataDir; dataDir << "world/"; /* Main Initiating */ adminNames.load( __admin, sizeof(__admin) / sizeof(const char*) ); colourNames.load( __colours, sizeof(__colours) / sizeof(const char*) ); clothCommands.load( __cloths, sizeof(__cloths) / sizeof(const char*) ); defaultFiles.load( __defaultfiles, sizeof(__defaultfiles) / sizeof(const char*) ); playerIds.add(0); playerIds.add(0); npcIds.add(0); srand((int)time(NULL)); /* Load Important Files */ updateFile("rchelp.txt"); updateFile("rcmessage.txt"); updateFile("rules.txt"); updateFile("serverflags.txt"); updateFile("servermessage.html"); updateFile("foldersconfig.txt"); /* Load Settings */ if (!loadSettings("serveroptions.txt")) { errorOut("errorlog.txt", "Unable to load server settings.."); return 1; } /* Load Weapons */ if (!loadWeapons("weapons.txt")) { errorOut("errorlog.txt", "Unable to load weapons from weapons.txt.."); return 1; } /* Initialize Sockets */ serverSock.setType( SOCKET_TYPE_SERVER ); serverSock.setProtocol( SOCKET_PROTOCOL_TCP ); serverSock.setOptions( SOCKET_OPTION_NONBLOCKING ); serverSock.setDescription( "serverSock" ); CString empty; if ( serverSock.init( empty, serverPort ) ) return 1; // Connect server socket. if ( serverSock.connect() ) { errorOut("errorlog.txt", CString() << "SOCK ERROR: Unable to listen on port: " << serverPort); return 1; } /* Server Finished Loading */ printf("GServer 2 by 39ster\nSpecial thanks to Marlon, Agret, Pac300, 39ster and others for porting the \noriginal 1.39 gserver to 2.1\nServer listening on port: %s\nServer version: Build %s\n\n", serverPort.text(), listServerFields[3].text()); errorOut("serverlog.txt", "Server started"); if ( listServerFields[5] == "localhost" ) errorOut("serverlog.txt", "[DEBUG_LOCALHOSTMODE] Localhost mode is activated.\nListserver communication & account authentication are disabled.", true); serverRunning = true; if ( !(listServerFields[5] == "localhost") ) if (!lsConnected) ListServer_Connect(); while (serverRunning) { long long second = time(NULL); while (second == time(NULL)) { acceptNewPlayers(serverSock); for (int i = 0; i < newPlayers.count(); i ++) { CPlayer* player = (CPlayer*)newPlayers[i]; player->main(); if (player->deleteMe) { delete player; i--; } } for(int i = 0; i < playerList.count(); i++) { CPlayer* player = (CPlayer*)playerList[i]; player->main(); if(player->deleteMe) { delete player; i--; } } // Was moved so it can process faster. - Joey ListServer_Main(); wait(10); } doTimer(); gameTime ++; NOLEVEL->reset(); // Every 30 seconds if (gameTime % 30 == 0) { ListServer_Send(CPacket() << (char)SLSPING << "\n"); } // Every 10 seconds if (gameTime % 10 == 0) { CPacket pPacket; CString file; for (int i = 0; i < playerList.count(); i++) { CPlayer *player = (CPlayer *)playerList[i]; file << player->accountName << "," << player->nickName << "," << player->levelName << "," << toString(player->x) << "," << toString(player->y) << "," << toString(player->ap) << "\n"; } file.save("logs/playerlist.txt"); serverFlags.save("serverflags.txt"); } //Every 5 seconds? int current = getNWTime(); if (nwTime != current) { nwTime = current; for (int i = 0; i < playerList.count(); i++) { CPacket out; out << (char)NEWWORLDTIME; out.writeByte4(current); ((CPlayer*)playerList[i])->sendPacket(out); } } } }
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"); }