📄 ipmgr.cpp
字号:
/****************************************************************************
;
; MODULE: IPMGR (.CPP)
;
; PURPOSE: IP Manager Classes
;
; HISTORY: 11/09/98 [blg] This file was created
;
; COMMENT: Copyright (c) 1998, Monolith Productions Inc.
;
****************************************************************************/
// Includes...
#include "Windows.h"
#include "cpp_client_de.h"
#include "IpMgr.h"
#include "Assert.h"
// Functions...
/* *********************************************************************** */
/* CIp */
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIp::Init
//
// PURPOSE: Initialization
//
// ----------------------------------------------------------------------- //
BOOL CIp::Init(char* sIp)
{
// Sanity checks...
if (!sIp) return(FALSE);
if (sIp[0] == '\0') return(FALSE);
// Set simple members...
strncpy(m_sIp, sIp, IPM_MAX_ADDRESS);
// All done...
return(TRUE);
}
/* *********************************************************************** */
/* CIpMgr */
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::Init
//
// PURPOSE: Initialization
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::Init(CClientDE* pClientDE)
{
// Sanity checks...
if (!pClientDE) return(FALSE);
// Set simple members...
Clear();
m_pClientDE = pClientDE;
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::Term
//
// PURPOSE: Termination
//
// ----------------------------------------------------------------------- //
void CIpMgr::Term()
{
// Delete all the ips...
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
delete pIp;
}
}
Clear();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::ExistIp
//
// PURPOSE: Determines if the given ip exists
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::ExistIp(char* sIp)
{
// Sanity checks...
if (!sIp) return(FALSE);
// Loop through each ip...
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
if (strcmp(sIp, pIp->GetAddress()) == 0)
{
return(TRUE);
}
}
}
// If we get here, the ip doesn't exist...
return(FALSE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::AddIp
//
// PURPOSE: Adds the given ip
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::AddIp(char* sIp)
{
// Sanity checks...
if (!sIp) return(FALSE);
// Make sure this ip doesn't already exist...
if (ExistIp(sIp)) return(TRUE);
// Make sure there is room to add this ip...
if (m_cIps >= IPM_MAX_IPS) return(FALSE);
// Create a new ip...
CIp* pIp = new CIp();
if (!pIp) return(FALSE);
if (!pIp->Init(sIp))
{
delete pIp;
return(FALSE);
}
// Add this ip...
m_aIps[m_cIps++] = pIp;
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::RemoveIp
//
// PURPOSE: Removes the given ip
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::RemoveIp(char* sIp)
{
// Sanity checks...
if (!sIp) return(FALSE);
// Loop through each ip...
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
if (strcmp(sIp, pIp->GetAddress()) == 0)
{
// Delete this ip...
delete pIp;
// Shift the array...
for (int j = i + 1; j < m_cIps; j++)
{
m_aIps[j-1] = m_aIps[j];
}
m_cIps--;
// All done removing the ip...
return(TRUE);
}
}
}
// If we get here, the ip doesn't exist so we can't remove it...
return(FALSE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::GetAllIpString
//
// PURPOSE: Returns a big huge string with all the ip addresses
// sperated by semi-colons.
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::GetAllIpString(char* sBuf, int nBufSize)
{
// Sanity checks...
if (!sBuf) return(FALSE);
if (nBufSize <= 0) return(FALSE);
// Start building the string, making sure we don't over-run the buffer...
int nTotalSize = 0;
strcpy(sBuf, "");
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
char* sIp = pIp->GetAddress();
if (sIp)
{
int nLen = strlen(sIp);
if (nTotalSize + nLen + 2 < nBufSize)
{
if (nTotalSize > 0) strcat(sBuf, ";");
strcat(sBuf, sIp);
nTotalSize = strlen(sBuf);
}
}
}
}
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::FillListBox
//
// PURPOSE: Fills the given list box with all the ips
//
// ----------------------------------------------------------------------- //
int CIpMgr::FillListBox(HWND hList)
{
// Sanity checks...
if (!hList) return(0);
// Empty the list box...
SendMessage(hList, LB_RESETCONTENT, 0, 0);
// Add each ip...
SendMessage(hList, WM_SETREDRAW, 0, 0);
int cIps = 0;
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
int nRet = SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)pIp->GetAddress());
if (nRet != LB_ERR) cIps++;
}
}
SendMessage(hList, WM_SETREDRAW, 1, 0);
InvalidateRect(hList, NULL, FALSE);
UpdateWindow(hList);
// All done...
return(cIps);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::AddIpFromEditControl
//
// PURPOSE: Adds a new ip from the given edit control
//
// COMMENT: This function will update a list box if one is given
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::AddIpFromEditControl(HWND hEdit, HWND hList)
{
// Sanity checks...
if (!hEdit) return(FALSE);
// Get the text from the edit control...
char sIp[IPM_MAX_ADDRESS + 2];
int nLen = GetWindowText(hEdit, sIp, IPM_MAX_ADDRESS);
if (nLen <= 0) return(FALSE);
// Add the ip...
if (!AddIp(sIp))
{
return(FALSE);
}
// Empty the edit control...
SetWindowText(hEdit, "");
// Fill the list box if one was specified...
FillListBox(hList);
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::RemoveSelectedIpFromListBox
//
// PURPOSE: Removes the currently selected ip from the given list box
//
// ----------------------------------------------------------------------- //
BOOL CIpMgr::RemoveSelectedIpFromListBox(HWND hList)
{
// Sanity checks...
if (!hList) return(FALSE);
// Get the currently selected ip text from the list box...
int iSel = SendMessage(hList, LB_GETCURSEL, 0, 0);
if (iSel == LB_ERR) return(FALSE);
char sIp[IPM_MAX_ADDRESS + 2];
int nRet = SendMessage(hList, LB_GETTEXT, iSel, (LPARAM)sIp);
if (nRet == LB_ERR) return(FALSE);
// Remove the ip from our array...
RemoveIp(sIp);
// Remove the ip from the list box...
SendMessage(hList, LB_DELETESTRING, iSel, 0);
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::RemoveAll
//
// PURPOSE: Removes all of the ips
//
// ----------------------------------------------------------------------- //
void CIpMgr::RemoveAll()
{
// Delete all the ips...
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
delete pIp;
}
}
Clear(FALSE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::WriteIps
//
// PURPOSE: Writes the ip addresses to the config file
//
// ----------------------------------------------------------------------- //
int CIpMgr::WriteIps()
{
// Sanity checks...
if (!m_pClientDE) return(0);
// Write each ip address...
char sKey[64];
char sTemp[512];
int cIps = 0;
for (int i = 0; i < m_cIps; i++)
{
CIp* pIp = GetIp(i);
if (pIp)
{
wsprintf(sKey, "Ip%i", i);
wsprintf(sTemp, "+%s %s", sKey, pIp->GetAddress());
m_pClientDE->RunConsoleString(sTemp);
cIps++;
}
}
// Write out the count...
wsprintf(sTemp, "+IpCount %i", cIps);
m_pClientDE->RunConsoleString(sTemp);
// All done...
return(cIps);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CIpMgr::ReadIps
//
// PURPOSE: Reads the ip addresses from the config file
//
// ----------------------------------------------------------------------- //
int CIpMgr::ReadIps()
{
// Sanity checks...
if (!m_pClientDE) return(0);
// Read the ip address count value...
int cIps = 0;
HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar("IpCount");
if (hVar)
{
cIps = (int)m_pClientDE->GetVarValueFloat(hVar);
}
if (cIps <= 0) return(0);
// Read each ip address...
char sKey[64];
int count = 0;
for (int i = 0; i < cIps; i++)
{
wsprintf(sKey, "Ip%i", i);
HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar(sKey);
if (hVar)
{
char* sValue = m_pClientDE->GetVarValueString(hVar);
if (sValue)
{
if (AddIp(sValue)) count++;
}
}
}
// All done...
return(count);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -