Statistics.cpp
This example demonstrates how to use PacketX to collect statistics from C++.
- See also:
- PacketX , Statistics , Adapter
#define WIN32_LEAN_AND_MEAN
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include <atlbase.h>
#include <stdio.h>
#include <time.h>
#import "PacketX.dll" no_namespace, named_guids
static HRESULT __Stats_Handler__(IPktXStatistics* pStats,DWORD dwParam);
int main(int argc, char* argv[])
{
#define MT_APARTMENT
#ifdef MT_APARTMENT
_S(CoInitializeEx(NULL,COINIT_MULTITHREADED));
#else
_S(CoInitialize(NULL));
#endif
IPktXPacketXPtr pPktX(__uuidof(PacketX));
LONG lCount= IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetCount();
for (int i=0; i < lCount; i++)
{
IPktXAdapterPtr pAdapter = IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetItem(i+1);
if (pAdapter->GetIsGood())
{
_bstr_t bstrtDesciption = pAdapter->GetDescription();
printf("(%d) %s\n",i+1,(char*)bstrtDesciption);
}
}
pPktX->PutAdapter(NULL);
while (pPktX->GetAdapter() == NULL)
{
char buffer[256];
printf("Choose adapter#");
try { pPktX->PutAdapter(IPktXAdapterCollectionPtr(
pPktX->GetAdapters())->GetItem(atoi(gets(buffer)))); }
catch ( _com_error& ) {}
}
IPktXAdapterPtr(pPktX->GetAdapter())->PutMode(PktXModeStatistics);
IPktXAdapterPtr(pPktX->GetAdapter())->PutReadTimeout(2000);
IPktXPacketSinkPtr pSink(__uuidof(PacketSink));
pSink.CreateInstance(__uuidof(PacketSink));
pSink->CallBackOnStatistics((DWORD)__Stats_Handler__,(DWORD)0);
pSink->Advise(pPktX);
pPktX->Start();
#ifdef MT_APARTMENT
Sleep(60000);
#else
MSG msg;
while (GetMessage(&msg, 0, 0, 0) && lEventCounter <= lNumOfEvents)
DispatchMessage(&msg);
#endif
pPktX->Stop();
pSink->Unadvise(pPktX);
pSink = NULL;
pPktX = NULL;
CoUninitialize();
return 0;
}
static HRESULT __Stats_Handler__(IPktXStatistics* pStats,DWORD dwParam)
{
time_t ltime = IPktXStatisticsPtr(pStats)->GetTimeSec();
printf("Pkts %d Bytes %d %s",
IPktXStatisticsPtr(pStats)->GetPackets(),
IPktXStatisticsPtr(pStats)->GetBytes(), ctime(<ime));
return 0;
}