📄 serverwnd.cpp
字号:
if (nIP == 0 || nPort == 0)
break;
(void)AddServer(nPort, ipstr(nIP), _T(""), false);
strTok = strServer.Tokenize(_T(" \t\r\n"), nPos);
}
}
bool CServerWnd::AddServer(uint16 nPort, CString strIP, CString strName, bool bShowErrorMB)
{
CServer* toadd = new CServer(nPort, strIP);
// Barry - Default all manually added servers to high priority
if (thePrefs.GetManualHighPrio())
toadd->SetPreference(SRV_PR_HIGH);
if (strName.IsEmpty())
strName = strIP;
toadd->SetListName(strName);
if (!serverlistctrl.AddServer(toadd, true))
{
CServer* update = theApp.serverlist->GetServerByAddress(toadd->GetAddress(), toadd->GetPort());
if (update)
{
update->SetListName(toadd->GetListName());
serverlistctrl.RefreshServer(update);
}
delete toadd;
if (bShowErrorMB)
AfxMessageBox(GetResString(IDS_SRV_NOTADDED));
return false;
}
else
{
AddLogLine(true, GetResString(IDS_SERVERADDED), toadd->GetListName());
return true;
}
}
void CServerWnd::OnBnClickedUpdateservermetfromurl()
{
// step1 - get url
CString strURL;
bool bDownloaded=false;
GetDlgItem(IDC_SERVERMETURL)->GetWindowText(strURL);
if (strURL==_T("")){
if (thePrefs.adresses_list.IsEmpty()){
AddLogLine(true, GetResString(IDS_SRV_NOURLAV) );
return;
}
else
{
POSITION Pos = thePrefs.adresses_list.GetHeadPosition();
while ((!bDownloaded) && (Pos != NULL)){
strURL = thePrefs.adresses_list.GetNext(Pos).GetBuffer();
bDownloaded=UpdateServerMetFromURL(strURL);
}
}
}
else
UpdateServerMetFromURL(strURL);
}
void CServerWnd::OnBnClickedResetLog()
{
int cur_sel = StatusSelector.GetCurSel();
if (cur_sel == -1)
return;
if (cur_sel == PaneVerboseLog)
{
theApp.emuledlg->ResetDebugLog();
theApp.emuledlg->statusbar->SetText(_T(""),0,0);
}
if (cur_sel == PaneLog)
{
theApp.emuledlg->ResetLog();
theApp.emuledlg->statusbar->SetText(_T(""),0,0);
}
if (cur_sel == PaneServerInfo)
{
servermsgbox->Reset();
// the statusbar does not contain any server log related messages, so it's not cleared.
}
}
void CServerWnd::OnTcnSelchangeTab3(NMHDR *pNMHDR, LRESULT *pResult)
{
UpdateLogTabSelection();
*pResult = 0;
}
void CServerWnd::UpdateLogTabSelection()
{
int cur_sel = StatusSelector.GetCurSel();
if (cur_sel == -1)
return;
if (cur_sel == PaneVerboseLog)
{
servermsgbox->ShowWindow(SW_HIDE);
logbox.ShowWindow(SW_HIDE);
debuglog.ShowWindow(SW_SHOW);
StatusSelector.HighlightItem(cur_sel, FALSE);
}
if (cur_sel == PaneLog)
{
debuglog.ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_HIDE);
logbox.ShowWindow(SW_SHOW);
StatusSelector.HighlightItem(cur_sel, FALSE);
}
if (cur_sel == PaneServerInfo)
{
debuglog.ShowWindow(SW_HIDE);
logbox.ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_SHOW);
servermsgbox->Invalidate();
StatusSelector.HighlightItem(cur_sel, FALSE);
}
}
void CServerWnd::ToggleDebugWindow()
{
int cur_sel = StatusSelector.GetCurSel();
if (thePrefs.GetVerbose() && !debug)
{
TCITEM newitem;
CString name;
name = SZ_DEBUG_LOG_TITLE;
newitem.mask = TCIF_TEXT|TCIF_IMAGE;
newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name);
newitem.iImage = 0;
StatusSelector.InsertItem(StatusSelector.GetItemCount(),&newitem);
debug = true;
}
else if (!thePrefs.GetVerbose() && debug)
{
if (cur_sel == PaneVerboseLog)
{
StatusSelector.SetCurSel(PaneLog);
StatusSelector.SetFocus();
}
debuglog.ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_HIDE);
logbox.ShowWindow(SW_SHOW);
StatusSelector.DeleteItem(PaneVerboseLog);
debug = false;
}
}
void CServerWnd::UpdateMyInfo() {
CString buffer;
m_MyInfo.SetRedraw(FALSE);
m_MyInfo.SetWindowText(_T(""));
///////////////////////////////////////////////////////////////////////////
// ED2K
///////////////////////////////////////////////////////////////////////////
m_MyInfo.SetSelectionCharFormat(m_cfBold);
m_MyInfo << _T("eD2K ") << GetResString(IDS_NETWORK) << _T("\r\n");
m_MyInfo.SetSelectionCharFormat(m_cfDef);
m_MyInfo << GetResString(IDS_STATUS) << _T(":\t");
if (theApp.serverconnect->IsConnected())
m_MyInfo << GetResString(IDS_CONNECTED);
else if(theApp.serverconnect->IsConnecting())
m_MyInfo << GetResString(IDS_CONNECTING);
else
m_MyInfo << GetResString(IDS_DISCONNECTED);
m_MyInfo << _T("\r\n");
if (theApp.serverconnect->IsConnected()){
m_MyInfo << GetResString(IDS_IP) << _T(":") << GetResString(IDS_PORT);
if (theApp.serverconnect->IsLowID())
buffer = GetResString(IDS_UNKNOWN);
else
buffer.Format(_T("%s:%i"), ipstr(theApp.serverconnect->GetClientID()), thePrefs.GetPort());
m_MyInfo << _T("\t") << buffer << _T("\r\n");
m_MyInfo << GetResString(IDS_ID) << _T("\t");
if (theApp.serverconnect->IsConnected()){
buffer.Format(_T("%u"),theApp.serverconnect->GetClientID());
m_MyInfo << buffer;
}
m_MyInfo << _T("\r\n");
m_MyInfo << _T("\t");
if (theApp.serverconnect->IsLowID())
m_MyInfo << GetResString(IDS_IDLOW);
else
m_MyInfo << GetResString(IDS_IDHIGH);
m_MyInfo << _T("\r\n");
CServer* cur_server = theApp.serverconnect->GetCurrentServer();
CServer* srv = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()) : NULL;
if (srv){
m_MyInfo << _T("\r\n");
m_MyInfo.SetSelectionCharFormat(m_cfBold);
m_MyInfo << _T("eD2K ") << GetResString(IDS_SERVER) << _T("\r\n");
m_MyInfo.SetSelectionCharFormat(m_cfDef);
m_MyInfo << GetResString(IDS_SW_NAME) << _T(":\t") << srv->GetListName() << _T("\r\n");
m_MyInfo << GetResString(IDS_DESCRIPTION) << _T(":\t") << srv->GetDescription() << _T("\r\n");
m_MyInfo << GetResString(IDS_IP) << _T(":\t") << srv->GetAddress() << _T(":") << srv->GetPort() << _T("\r\n");
m_MyInfo << GetResString(IDS_VERSION) << _T(":\t") << srv->GetVersion() << _T("\r\n");
m_MyInfo << GetResString(IDS_UUSERS) << _T(":\t") << GetFormatedUInt(srv->GetUsers()) << _T("\r\n");
m_MyInfo << GetResString(IDS_PW_FILES) << _T(":\t") << GetFormatedUInt(srv->GetFiles()) << _T("\r\n");
}
}
m_MyInfo << _T("\r\n");
///////////////////////////////////////////////////////////////////////////
// Kademlia
///////////////////////////////////////////////////////////////////////////
m_MyInfo.SetSelectionCharFormat(m_cfBold);
m_MyInfo << GetResString(IDS_KADEMLIA) << _T(" ") << GetResString(IDS_NETWORK) << _T("\r\n");
m_MyInfo.SetSelectionCharFormat(m_cfDef);
m_MyInfo << GetResString(IDS_STATUS) << _T(":\t");
if(Kademlia::CKademlia::isConnected()){
if(Kademlia::CKademlia::isFirewalled())
m_MyInfo << GetResString(IDS_FIREWALLED);
else
m_MyInfo << GetResString(IDS_KADOPEN);
m_MyInfo << _T("\r\n");
CString IP;
Kademlia::CMiscUtils::ipAddressToString(Kademlia::CKademlia::getPrefs()->getIPAddress(),&IP);
buffer.Format(_T("%s:%i"), IP, thePrefs.GetUDPPort());
m_MyInfo << GetResString(IDS_IP) << _T(":") << GetResString(IDS_PORT) << _T("\t") << buffer << _T("\r\n");
buffer.Format(_T("%u"),Kademlia::CKademlia::getPrefs()->getIPAddress());
m_MyInfo << GetResString(IDS_ID) << _T("\t") << buffer << _T("\r\n");
}
else if (Kademlia::CKademlia::isRunning())
m_MyInfo << GetResString(IDS_CONNECTING) << _T("\r\n");
else
m_MyInfo << GetResString(IDS_DISCONNECTED) << _T("\r\n");
m_MyInfo << _T("\r\n");
///////////////////////////////////////////////////////////////////////////
// Web Interface
///////////////////////////////////////////////////////////////////////////
m_MyInfo.SetSelectionCharFormat(m_cfBold);
m_MyInfo << GetResString(IDS_WEBSRV) << _T("\r\n");
m_MyInfo.SetSelectionCharFormat(m_cfDef);
m_MyInfo << GetResString(IDS_STATUS) << _T(":\t");
m_MyInfo << (theApp.webserver->IsRunning() ? GetResString(IDS_ENABLED) : GetResString(IDS_DISABLED)) << _T("\r\n");
if (thePrefs.GetWSIsEnabled()){
CString count;
count.Format(_T("%i %s"),theApp.webserver->GetSessionCount(),GetResString(IDS_ACTSESSIONS));
m_MyInfo << _T("\t") << count << _T("\r\n");
uint32 nLocalIP = theApp.serverconnect->GetLocalIP();
m_MyInfo << _T("URL:\t") << _T("http://") << ipstr(nLocalIP) << _T(":") << thePrefs.GetWSPort() << _T("/\r\n");
}
m_MyInfo.SetRedraw(TRUE);
m_MyInfo.Invalidate();
}
BOOL CServerWnd::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN){
if (pMsg->wParam == VK_ESCAPE)
return FALSE;
if( m_pacServerMetURL && m_pacServerMetURL->IsBound() && ((pMsg->wParam == VK_DELETE) && (pMsg->hwnd == GetDlgItem(IDC_SERVERMETURL)->m_hWnd) && (GetAsyncKeyState(VK_MENU)<0 || GetAsyncKeyState(VK_CONTROL)<0)) )
m_pacServerMetURL->Clear();
if (pMsg->wParam == VK_RETURN){
if ( pMsg->hwnd == GetDlgItem(IDC_IPADDRESS)->m_hWnd
|| pMsg->hwnd == GetDlgItem(IDC_SPORT)->m_hWnd
|| pMsg->hwnd == GetDlgItem(IDC_SNAME)->m_hWnd){
OnBnClickedAddserver();
return TRUE;
}
else if (pMsg->hwnd == GetDlgItem(IDC_SERVERMETURL)->m_hWnd){
if (m_pacServerMetURL && m_pacServerMetURL->IsBound() ){
CString strText;
GetDlgItem(IDC_SERVERMETURL)->GetWindowText(strText);
if (!strText.IsEmpty()){
GetDlgItem(IDC_SERVERMETURL)->SetWindowText(_T("")); // this seems to be the only chance to let the dropdown list to disapear
GetDlgItem(IDC_SERVERMETURL)->SetWindowText(strText);
((CEdit*)GetDlgItem(IDC_SERVERMETURL))->SetSel(strText.GetLength(), strText.GetLength());
}
}
OnBnClickedUpdateservermetfromurl();
return TRUE;
}
}
}
return CResizableDialog::PreTranslateMessage(pMsg);
}
BOOL CServerWnd::SaveServerMetStrings()
{
if (m_pacServerMetURL== NULL)
return FALSE;
return m_pacServerMetURL->SaveList(CString(thePrefs.GetConfigDir()) + _T("\\") SERVERMET_STRINGS_PROFILE);
}
void CServerWnd::ShowServerInfo() {
CString buffer;
CServer* cur_server = theApp.serverconnect ? theApp.serverconnect->GetCurrentServer() : NULL;
CServer* server = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()) : NULL;
if (!theApp.serverconnect->IsConnected() || server==NULL)
buffer=GetResString(IDS_ERR_NOTCONNECTED);
else {
CString buffer2;
buffer2.Format(_T("%s:\n %s\n\n"),GetResString(IDS_SL_SERVERNAME),server->GetListName());
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %s\n\n"),GetResString(IDS_DESCRIPTION),server->GetDescription());
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %s\n\n"),GetResString(IDS_VERSION),server->GetVersion() );
buffer.Append(buffer2);
if (thePrefs.IsExtControlsEnabled()){
buffer2.Format(_T("%s:\n "), GetResString(IDS_SRV_TCPCOMPR));
if (server->GetTCPFlags() & SRV_TCPFLG_COMPRESSION)
buffer2 += GetResString(IDS_YES);
else
buffer2 += GetResString(IDS_NO);
buffer.Append(buffer2 + _T("\n\n"));
}
if (thePrefs.IsExtControlsEnabled()){
buffer2.Format(_T("%s:\n "), GetResString(IDS_SRV_UDPSR));
if (server->GetUDPFlags() & SRV_UDPFLG_EXT_GETSOURCES)
buffer2 += GetResString(IDS_YES);
else
buffer2 += GetResString(IDS_NO);
buffer.Append(buffer2 + _T("\n\n"));
buffer2.Format(_T("%s:\n "), GetResString(IDS_SRV_UDPFR));
if (server->GetUDPFlags() & SRV_UDPFLG_EXT_GETFILES)
buffer2 += GetResString(IDS_YES);
else
buffer2 += GetResString(IDS_NO);
buffer.Append(buffer2 + _T("\n\n"));
}
buffer2.Format(_T("%s%s:\n %s:%u\n\n"),GetResString(IDS_CD_UIP),GetResString(IDS_PORT),server->GetFullIP(),server->GetPort() );
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %u\n\n"),GetResString(IDS_PW_FILES),server->GetFiles());
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %u / %u\n\n"),GetResString(IDS_SERVER_LIMITS),server->GetSoftFiles(),server->GetHardFiles());
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %u / %u\n\n"),GetResString(IDS_UUSERS),server->GetUsers(),server->GetMaxUsers());
buffer.Append(buffer2);
buffer2.Format(_T("%s:\n %u ms\n\n"),GetResString(IDS_PING),server->GetPing());
buffer.Append(buffer2);
}
MessageBox(buffer, GetResString(IDS_SERVERINFO));
}
void CServerWnd::OnEnLinkServerBox(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
ENLINK* pEnLink = reinterpret_cast<ENLINK *>(pNMHDR);
if (pEnLink && pEnLink->msg == WM_LBUTTONDOWN)
{
CString strUrl;
servermsgbox->GetTextRange(pEnLink->chrg.cpMin, pEnLink->chrg.cpMax, strUrl);
if (strUrl == m_strClickNewVersion){
// MOD Note: Do not remove this part - Merkur
strUrl.Format(_T("/en/version_check.php?version=%i&language=%i"),theApp.m_uCurVersionCheck,thePrefs.GetLanguageID());
strUrl = thePrefs.GetVersionCheckBaseURL()+strUrl;
// MOD Note: end
}
ShellExecute(NULL, NULL, strUrl, NULL, NULL, SW_SHOWDEFAULT);
*pResult = 1;
}
}
void CServerWnd::UpdateControlsState()
{
CString strLabel;
if (theApp.serverconnect->IsConnected())
strLabel = GetResString(IDS_MAIN_BTN_DISCONNECT);
else if (theApp.serverconnect->IsConnecting())
strLabel = GetResString(IDS_MAIN_BTN_CANCEL);
else
strLabel = GetResString(IDS_MAIN_BTN_CONNECT);
strLabel.Remove(_T('&'));
GetDlgItem(IDC_ED2KCONNECT)->SetWindowText(strLabel);
}
void CServerWnd::OnBnConnect()
{
if (theApp.serverconnect->IsConnected())
theApp.serverconnect->Disconnect();
else if (theApp.serverconnect->IsConnecting())
theApp.serverconnect->StopConnectionTry();
else
theApp.serverconnect->ConnectToAnyServer();
}
void CServerWnd::SaveAllSettings()
{
thePrefs.SetLastLogPaneID(StatusSelector.GetCurSel());
serverlistctrl.SaveSettings(CPreferences::tableServer);
SaveServerMetStrings();
}
void CServerWnd::OnDDClicked() {
CWnd* box=GetDlgItem(IDC_SERVERMETURL);
box->SetFocus();
box->SetWindowText(_T(""));
box->SendMessage(WM_KEYDOWN,VK_DOWN,0x00510001);
}
void CServerWnd::ResetHistory() {
if (m_pacServerMetURL==NULL) return;
GetDlgItem(IDC_SERVERMETURL)->SendMessage(WM_KEYDOWN, VK_ESCAPE, 0x00510001);
m_pacServerMetURL->Clear();
}
BOOL CServerWnd::OnHelpInfo(HELPINFO* pHelpInfo)
{
theApp.ShowHelp(eMule_FAQ_Update_Server);
return TRUE;
}
void CServerWnd::OnSvrTextChange()
{
GetDlgItem(IDC_ADDSERVER)->EnableWindow(GetDlgItem(IDC_IPADDRESS)->GetWindowTextLength());
GetDlgItem(IDC_UPDATESERVERMETFROMURL)->EnableWindow( GetDlgItem(IDC_SERVERMETURL)->GetWindowTextLength()>0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -