static void ev_io_on_request(struct ev_loop* mainloop, ev_io* watcher, const int events) { int client_fd; struct sockaddr_in sockaddr; socklen_t addrlen; addrlen = sizeof(struct sockaddr_in); client_fd = accept(watcher->fd, (struct sockaddr*)&sockaddr, &addrlen); if(client_fd < 0) { DBG("Could not accept() client: errno %d", errno); return; } int flags = fcntl(client_fd, F_GETFL, 0); if(fcntl(client_fd, F_SETFL, (flags < 0 ? 0 : flags) | O_NONBLOCK) == -1) { DBG("Could not set_nonblocking() client %d: errno %d", client_fd, errno); return; } Request* request = Request_new( SERVER_INFO(mainloop), client_fd, inet_ntoa(sockaddr.sin_addr) ); DBG_REQ(request, "Accepted client %s:%d on fd %d", inet_ntoa(sockaddr.sin_addr), ntohs(sockaddr.sin_port), client_fd); ev_io_init(&request->ev_watcher, &ev_io_on_read, client_fd, EV_READ); ev_io_start(mainloop, &request->ev_watcher); }
void CUIPortal::Create_SiegeDungeon_MonCtr_MsgBox(int nCurRate) { CUIManager* pUIManager = CUIManager::getSingleton(); if( pUIManager->DoesMessageBoxExist(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL) ) pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL); CTString strMessage; CUIMsgBox_Info MsgBoxInfo; MsgBoxInfo.SetMsgBoxInfo( _S(3926, "던전 내부 몬스터 제어" ), UMBS_OKCANCEL | UMBS_SPINBUTTON , UI_PORTAL, MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL, 400 ); MsgBoxInfo.AddString( _S(3927, "크리스탈의 기운으로 던전에 있는 몬스터들을 온순하게 만들 수 있습니다. 던전의 몬스터가 온순해지면 몬스터의 공격력과 방어력, 최대 HP가 하락합니다.") ); MsgBoxInfo.AddString( _S(3928, "단, 몬스터의 온순함을 상승 시키기 위해서는 나스가 필요하며, 온순함은 1시간(현재시간)에 10%씩 하락됩니다.") ); ++MsgBoxInfo.m_nMaxRow; MsgBoxInfo.AddString( _S(3929, "어느 정도나 온순하게 만드시겠습니까?") ); MsgBoxInfo.m_nMaxRow +=2; int nNeedNas = SERVER_INFO()->GetDG_MonsterNas() * 10; strMessage.PrintF( _s("%s: %d %s%s"), _S(1058, "필요나스"), nNeedNas, _S(1762, "나스"), _s(" ") ); MsgBoxInfo.AddString( strMessage, 0xF2F2F2FF, TEXT_RIGHT ); MsgBoxInfo.m_nColorBoxCount =4; MsgBoxInfo.SetSpinButton(MsgBoxInfo.m_nMaxRow-2, 1, -1, _S(3930, "온순함 상승%") + _s(" ")); pUIManager->CreateMessageBox( MsgBoxInfo ); int iPosX[4], iPosY[4]; int iWidth[4], iHeight[4]; iPosX[0] =MsgBoxInfo.m_nSpinButtonPosX -6; iPosY[0] =MsgBoxInfo.m_nSpinButtonPosY -3; iWidth[0] =0; iHeight[0] = 32; iPosX[1] =iPosX[0]; iPosY[1] =iPosY[0]; iWidth[1] =MsgBoxInfo.m_nWidth -iPosX[0]*2; iHeight[1] = 0; iPosX[2] =MsgBoxInfo.m_nWidth -iPosX[0]; iPosY[2] =iPosY[0]; iWidth[2] =0; iHeight[2] = 34; iPosX[3] =iPosX[0]; iPosY[3] =iPosY[0] +32; iWidth[3] =iWidth[1]; iHeight[3] = 0; WRect rcBox[4]; rcBox[0].SetRect( iPosX[0], iPosY[0], iPosX[0]+iWidth[0], iPosY[0]+iHeight[0]); rcBox[1].SetRect( iPosX[1], iPosY[1], iPosX[1]+iWidth[1], iPosY[1]+iHeight[1]); rcBox[2].SetRect( iPosX[2], iPosY[2], iPosX[2]+iWidth[2], iPosY[2]+iHeight[2]); rcBox[3].SetRect( iPosX[3], iPosY[3], iPosX[3]+iWidth[3], iPosY[3]+iHeight[3]); pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->SetColorBox(0, 0, rcBox[0]); pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->SetColorBox(1, 0, rcBox[1]); pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->SetColorBox(2, 0, rcBox[2]); pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->SetColorBox(3, 0, rcBox[3]); for(int i=1; i<=10; ++i) { if( (i*10 +nCurRate) >100 ) break; CTString strData; strData.PrintF("%d", i*10); pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->GetSpinButton().AddData(strData); } }
void CUIPortal::MsgBoxCommand( int nCommandCode, BOOL bOK, CTString &strInput ) { CUIManager* pUIManager = CUIManager::getSingleton(); eSelectionCommand eType; switch(SERVER_INFO()->GetDG_Mode()) { case eDUNGEON_MODE_NOMAL: eType = DRATAN_SIEGE_DUNGEON_CONTROL_NOMAL; break; case eDUNGEON_MODE_LORD: eType = DRATAN_SIEGE_DUNGEON_CONTROL_LORD; break; } switch( nCommandCode ) { case MSGCMD_SIEGE_DUNGEON_ENTER: { if( bOK ) { _pNetwork->SendDratanSiegeDungeonMSG(MSG_DUNGEON_ENTER, MSG_DUNGEON_GO); } } break; case MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CONTROL: { if( bOK ) { if( pUIManager->DoesMessageBoxExist(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CHANGE) ) pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CHANGE); CUIMsgBox_Info MsgBoxInfo; CTString strMessage; int nRate =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CONTROL)->GetSpinButton().GetDataToNumber(); strMessage.PrintF( _S( 191, "확인" ) ); MsgBoxInfo.SetMsgBoxInfo(strMessage,UMBS_YESNO,UI_PORTAL,MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CHANGE); strMessage.PrintF( _S(3909, "현재 상태에서 %d%%만큼 더 쾌적하게 하시겠습니까?" ), nRate ); MsgBoxInfo.AddString(strMessage); pUIManager->CreateMessageBox(MsgBoxInfo); } else { pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CONTROL); pUIManager->GetPortal()->MsgBoxLCommand(MSGLCMD_DRATAN_SIEGE_DUNGEON_REQ, eType); } } break; case MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL: { if( bOK ) { if( pUIManager->DoesMessageBoxExist(MSGCMD_SIEGE_DUNGEON_MONSTER_CHANGE) ) pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CHANGE); CUIMsgBox_Info MsgBoxInfo; CTString strMessage; int nRate =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->GetSpinButton().GetDataToNumber(); strMessage.PrintF( _S( 191, "확인" ) ); MsgBoxInfo.SetMsgBoxInfo(strMessage,UMBS_YESNO,UI_PORTAL,MSGCMD_SIEGE_DUNGEON_MONSTER_CHANGE); strMessage.PrintF( _S(3910, "현재 상태에서 %d%%만큼 더 온순하게 하시겠습니까?" ), nRate ); MsgBoxInfo.AddString(strMessage); pUIManager->CreateMessageBox(MsgBoxInfo); } else { pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL); pUIManager->GetPortal()->MsgBoxLCommand(MSGLCMD_DRATAN_SIEGE_DUNGEON_REQ, eType); } } break; case MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CONTROL: { if( bOK ) { if( pUIManager->DoesMessageBoxExist(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CHANGE) ) pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CHANGE); CUIMsgBox_Info MsgBoxInfo; CTString strMessage; int nFee =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CONTROL)->GetSpinButton().GetDataToNumber(); strMessage.PrintF( _S( 191, "확인" ) ); MsgBoxInfo.SetMsgBoxInfo(strMessage,UMBS_YESNO,UI_PORTAL,MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CHANGE); strMessage.PrintF( _S(3911, "입장료를 %d%%로 설정하시겠습니까?" ), nFee ); MsgBoxInfo.AddString(strMessage); pUIManager->CreateMessageBox(MsgBoxInfo); } else { pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CONTROL); pUIManager->GetPortal()->MsgBoxLCommand(MSGLCMD_DRATAN_SIEGE_DUNGEON_REQ, DRATAN_SIEGE_DUNGEON_CONTROL_LORD); } } break; case MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CONTROL: { if( bOK ) { if( pUIManager->DoesMessageBoxExist(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CHANGE) ) pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CHANGE); CUIMsgBox_Info MsgBoxInfo; CTString strMessage; int nFee =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CONTROL)->GetSpinButton().GetDataToNumber(); strMessage.PrintF( _S( 191, "확인" ) ); MsgBoxInfo.SetMsgBoxInfo(strMessage,UMBS_YESNO,UI_PORTAL,MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CHANGE); strMessage.PrintF( _S(3912, "수렵세율을 %d%%로 설정하시겠습니까?" ), nFee ); MsgBoxInfo.AddString(strMessage); pUIManager->CreateMessageBox(MsgBoxInfo); } else { pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CONTROL); pUIManager->GetPortal()->MsgBoxLCommand(MSGLCMD_DRATAN_SIEGE_DUNGEON_REQ, DRATAN_SIEGE_DUNGEON_CONTROL_LORD); } } break; case MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CHANGE: { if( bOK ) { int nRate =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CONTROL)->GetSpinButton().GetDataToNumber(); pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ENVIRONMENT_CONTROL); _pNetwork->SendDratanSiegeDungeonMSG(MSG_MANAGEMENT, MSG_MANAGEMENT_MANAGER_ENV_CHANGE, nRate); } } break; case MSGCMD_SIEGE_DUNGEON_MONSTER_CHANGE: { if( bOK ) { int nRate =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL)->GetSpinButton().GetDataToNumber(); pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_MONSTER_CONTROL); _pNetwork->SendDratanSiegeDungeonMSG(MSG_MANAGEMENT, MSG_MANAGEMENT_MANAGER_MONSTER_CHANGE, nRate); } } break; case MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CHANGE: { if( bOK ) { int nFee =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CONTROL)->GetSpinButton().GetDataToNumber(); pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_ADMISSION_FEE_CONTROL); _pNetwork->SendDratanSiegeDungeonMSG(MSG_MANAGEMENT, MSG_MANAGEMENT_MANAGER_TAX_CHANGE, nFee); } } break; case MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CHANGE: { if( bOK ) { int nFee =pUIManager->GetMessageBox(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CONTROL)->GetSpinButton().GetDataToNumber(); pUIManager->CloseMessageBox(MSGCMD_SIEGE_DUNGEON_HUNTING_FEE_CONTROL); _pNetwork->SendDratanSiegeDungeonMSG(MSG_MANAGEMENT, MSG_MANAGEMENT_MANAGER_HUNTER_TAX_CHANGE, nFee); } } break; } }