Click here to Skip to main content
15,893,594 members
Articles / Web Development / HTML

Runtime Trace

Rate me:
Please Sign up or sign in to vote.
3.60/5 (5 votes)
30 Mar 20033 min read 57.6K   1.5K   22  
Display trace messages at runtime from several running applications on different machines
#ifndef BOGDAN_RECHI_DDDOI_RTCLASS_H__
#define BOGDAN_RECHI_DDDOI_RTCLASS_H__

#include <Winsock2.h>
#include <atlconv.h>

class TraceClass
{
  BOOL      m_bConnected;
	SOCKET    m_sock;
  CString   m_szName;

public:
  CString   m_szError;

  TraceClass()
  {
    WSADATA wsaData;
    
    m_szError.Empty();
    
    m_bConnected=FALSE;
    if (WSAStartup(0x0202,&wsaData))
    {
      m_szError.Format(_T("Cannot startup sockets library!"));
      return;
    }
  }
    
  BOOL SetTarget(LPCTSTR szIP, LPCTSTR szName, short nPort)
  {
    USES_CONVERSION;

    struct sockaddr_in serv;
    struct sockaddr_in client;
    
    m_szName.Format(_T("%s"), szName);

    if (m_bConnected)
    {
      shutdown(m_sock, 2);
      closesocket(m_sock);
    }
    
    if ((m_sock=socket(AF_INET, SOCK_DGRAM, 0))==
      INVALID_SOCKET) 
    {
      m_szError.Format(_T("Cannot create socket!"));
      
      return FALSE;
    } 
    
    memset((void *)&serv, 0, sizeof(serv));
    serv.sin_family = AF_INET;
    serv.sin_addr.s_addr = inet_addr(T2A(const_cast<LPTSTR>(szIP)));
    serv.sin_port = htons(nPort);
    
    memset((void *)&client, 0, sizeof(client));
    client.sin_family = AF_INET;
    
    try
    {
      if (bind(m_sock, (struct sockaddr*)&client, 
        sizeof(client))==SOCKET_ERROR)
        throw CString(_T("Error on binding the socket!"));
      
      if (!(m_bConnected=SOCKET_ERROR != connect(m_sock, 
        (struct sockaddr*)&serv, sizeof(serv))))
        throw CString(_T("Error on connecting to socket!"));
    }
    catch (CString &szMan)
    {
      m_szError=szMan;
      shutdown(m_sock, 2);
      closesocket(m_sock);
      
      return FALSE;
    }
    
    return TRUE;
  }

  BOOL Trace(LPCTSTR fmt, ...)
  {
    USES_CONVERSION;

    if (!m_bConnected) return FALSE;

    COleDateTime now = COleDateTime::GetCurrentTime();
    CString sz, buff;
    char szMan[101];
    va_list param;
    va_start( param, fmt);
    buff.FormatV(fmt, param);
    va_end( param );
    
    gethostname(szMan, 100);
    sz.Format(_T("%s"), A2T(szMan));
    sz=sz.Left(18);
    sz+=_T("\"")+m_szName+_T("\" ")+now.Format(_T("[%H:%M:%S] "))+buff;
    if (send(m_sock, (const char *)(LPCTSTR)sz, sz.GetLength()*sizeof(TCHAR), 0)
      ==SOCKET_ERROR)
    {
      m_szError.Format(_T("Error on sending message!"));
      return FALSE;
    }

    return TRUE;
  }
  
  ~TraceClass()
  {
    shutdown(m_sock, 2);
    closesocket(m_sock);
    
    WSACleanup();	
  }
};


#endif

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Software Developer (Senior)
Europe Europe
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions