From 1b2e1dcb6ed1c5fbb1e689ce8a8ed2b9a5548b4c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 Aug 2008 20:35:07 +0000 Subject: [PATCH] added ping messages in protocol class --- src/protocol.cpp | 87 +++++++++++++++++++++++++++++++++++++----------- src/protocol.h | 4 +++ 2 files changed, 71 insertions(+), 20 deletions(-) diff --git a/src/protocol.cpp b/src/protocol.cpp index 2a4033cd..67a5625c 100755 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -98,8 +98,13 @@ MESSAGES | 2 bytes number n | n bytes UTF-8 string | +------------------+----------------------+ +- Ping message (for measuring the ping time) PROTMESSID_PING + + +--------------------------------------------------------------------------+ + | 5 bytes transmit time (1 byte hours, 1 byte min, 1 byte sec, 2 bytes ms) | + +--------------------------------------------------------------------------+ + - * ****************************************************************************** * * This program is free software; you can redistribute it and/or modify it under @@ -370,6 +375,11 @@ for ( int i = 0; i < iNumBytes; i++ ) { EvaluateChatTextMes ( iPos, vecData ); break; + + case PROTMESSID_PING: + + EvaluatePingMes ( iPos, vecData ); + break; } // send acknowledge message @@ -603,6 +613,25 @@ void CProtocol::CreateChanNameMes ( const QString strName ) CreateAndSendMessage ( PROTMESSID_CHANNEL_NAME, vecData ); } +void CProtocol::EvaluateChanNameMes ( unsigned int iPos, const CVector& vecData ) +{ + // number of bytes for name string (2 bytes) + const int iStrLen = + static_cast ( GetValFromStream ( vecData, iPos, 2 ) ); + + // name string (n bytes) + QString strName = ""; + for ( int j = 0; j < iStrLen; j++ ) + { + // byte-by-byte copying of the string data + int iData = static_cast ( GetValFromStream ( vecData, iPos, 1 ) ); + strName += QString ( (char*) &iData ); + } + + // invoke message action + emit ChangeChanName ( strName ); +} + void CProtocol::CreateChatTextMes ( const QString strChatText ) { unsigned int iPos = 0; // init position pointer @@ -628,25 +657,6 @@ void CProtocol::CreateChatTextMes ( const QString strChatText ) CreateAndSendMessage ( PROTMESSID_CHAT_TEXT, vecData ); } -void CProtocol::EvaluateChanNameMes ( unsigned int iPos, const CVector& vecData ) -{ - // number of bytes for name string (2 bytes) - const int iStrLen = - static_cast ( GetValFromStream ( vecData, iPos, 2 ) ); - - // name string (n bytes) - QString strName = ""; - for ( int j = 0; j < iStrLen; j++ ) - { - // byte-by-byte copying of the string data - int iData = static_cast ( GetValFromStream ( vecData, iPos, 1 ) ); - strName += QString ( (char*) &iData ); - } - - // invoke message action - emit ChangeChanName ( strName ); -} - void CProtocol::EvaluateChatTextMes ( unsigned int iPos, const CVector& vecData ) { // number of bytes for name string (2 bytes) @@ -666,6 +676,43 @@ void CProtocol::EvaluateChatTextMes ( unsigned int iPos, const CVector& emit ChatTextReceived ( strChatText ); } +void CProtocol::CreatePingMes ( const QTime time ) +{ + unsigned int iPos = 0; // init position pointer + + // build data vector (5 bytes long) + CVector vecData ( 5 ); + + // convert QTime to network time + CVector vNetTimeInfo ( CTimeConv().QTi2NetTi ( time ) ); + + // convert all bytes (byte by byte) + for ( int j = 0; j < 5; j++ ) + { + // byte-by-byte copying of the string data + PutValOnStream ( vecData, iPos, + static_cast ( vNetTimeInfo[j] ), 1 ); + } + + CreateAndSendMessage ( PROTMESSID_PING, vecData ); +} + +void CProtocol::EvaluatePingMes ( unsigned int iPos, const CVector& vecData ) +{ + // time information vector + CVector vNetTimeInfo ( 5 ); // 5 bytes + for ( int j = 0; j < 5; j++ ) + { + // byte-by-byte copying of the time information data + int iData = static_cast ( GetValFromStream ( vecData, iPos, 1 ) ); + vNetTimeInfo[j] = static_cast ( iData ); + } + + // convert time to QTime and invoke message action + emit PingReceived ( CTimeConv().NetTi2QTi ( vNetTimeInfo ) ); +} + + /******************************************************************************\ * Message generation (parsing) * diff --git a/src/protocol.h b/src/protocol.h index a37eb1ec..0ce34d8e 100755 --- a/src/protocol.h +++ b/src/protocol.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "global.h" #include "util.h" @@ -72,6 +73,7 @@ public: void CreateChanGainMes ( const int iChanID, const double dGain ); void CreateChanNameMes ( const QString strName ); void CreateChatTextMes ( const QString strChatText ); + void CreatePingMes ( const QTime time ); void CreateConClientListMes ( const CVector& vecChanInfo ); @@ -142,6 +144,7 @@ protected: void EvaluateChanNameMes ( unsigned int iPos, const CVector& vecData ); void EvaluateChatTextMes ( unsigned int iPos, const CVector& vecData ); void EvaluateConClientListMes ( unsigned int iPos, const CVector& vecData ); + void EvaluatePingMes ( unsigned int iPos, const CVector& vecData ); int iOldRecID, iOldRecCnt; @@ -165,6 +168,7 @@ signals: void ChangeChanGain ( int iChanID, double dNewGain ); void ChangeChanName ( QString strName ); void ChatTextReceived ( QString strChatText ); + void PingReceived ( QTime time ); void ConClientListMesReceived ( CVector vecChanInfo ); void ReqJittBufSize(); void ReqConnClientsList();