Statistics.cpp

This example demonstrates how to use PacketX to collect statistics from C++.
See also:
PacketX , Statistics , Adapter
// File:         Statistics.cpp
//
// Description:  This sample demonstrates how to collect statistics
//
// Notes:        Compile with Microsoft Visual C++ 6.0 or .NET
//
// Created:      May 10, 2004
//
// Copyright (c) 2000-2004 BeeSync Technologies.

#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[])
{
   // Initialize COM
#define MT_APARTMENT
#ifdef MT_APARTMENT
   _S(CoInitializeEx(NULL,COINIT_MULTITHREADED));
#else
   _S(CoInitialize(NULL));
#endif

   // Create PacketX
   IPktXPacketXPtr pPktX(__uuidof(PacketX));

   // Display network adapters
   LONG lCount= IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetCount();
   for (int i=0; i < lCount; i++)
   {
      // If adapter is good print adapter properties
      IPktXAdapterPtr pAdapter = IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetItem(i+1);
      if (pAdapter->GetIsGood())
      {
         _bstr_t bstrtDesciption = pAdapter->GetDescription();
         printf("(%d) %s\n",i+1,(char*)bstrtDesciption);
      }
   }
   // Select network adapter
   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& ) {}
   }
   // Set statistics mode
   IPktXAdapterPtr(pPktX->GetAdapter())->PutMode(PktXModeStatistics);
   IPktXAdapterPtr(pPktX->GetAdapter())->PutReadTimeout(2000);

   // Create sink
   IPktXPacketSinkPtr pSink(__uuidof(PacketSink));
   pSink.CreateInstance(__uuidof(PacketSink));
   pSink->CallBackOnStatistics((DWORD)__Stats_Handler__,(DWORD)0);

   // Bind sink to PacketX
   pSink->Advise(pPktX);

   // Start capture
   pPktX->Start();

#ifdef MT_APARTMENT
      Sleep(60000);
#else
   // Message loop
   MSG msg;
   while (GetMessage(&msg, 0, 0, 0) && lEventCounter <= lNumOfEvents)
      DispatchMessage(&msg);
#endif

   // Stop capture
   pPktX->Stop();

   // Unadvise sink from PacketX
   pSink->Unadvise(pPktX);

   // Cleanup
   pSink = NULL;
   pPktX = NULL;

   // Uninitialize COM
   CoUninitialize();
   return 0;
}

// Statistics event handler
static HRESULT __Stats_Handler__(IPktXStatistics* pStats,DWORD dwParam)
{
   // Get time in seconds
   time_t ltime = IPktXStatisticsPtr(pStats)->GetTimeSec();

   // Display statistics
   printf("Pkts %d Bytes %d %s",
      IPktXStatisticsPtr(pStats)->GetPackets(),
      IPktXStatisticsPtr(pStats)->GetBytes(), ctime(&ltime));
   return 0;
}

Copyright © 2000-2007 beeSync. All rights reserved.