⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sender_qos_event_handler.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
/* -*- C++ -*- */// Sender_QoS_Event_Handler.cpp,v 1.3 2003/11/01 11:15:23 dhinton Exp// ============================================================================//// = LIBRARY//    ACE_wrappers/examples/QOS//// = FILENAME//    Sender_QoS_Event_Handler.cpp//// = AUTHOR//    Vishal Kachroo <vishal@cs.wustl.edu>//// ============================================================================#include "Sender_QoS_Event_Handler.h"#include "ace/Log_Msg.h"#include "Fill_ACE_QoS.h"// Constructor.Sender_QoS_Event_Handler::Sender_QoS_Event_Handler (void){}// Constructor.Sender_QoS_Event_Handler::Sender_QoS_Event_Handler (const ACE_SOCK_Dgram_Mcast_QoS                                                    &dgram_mcast_qos,                                                    ACE_QoS_Session *qos_session)  : dgram_mcast_qos_ (dgram_mcast_qos),    qos_session_ (qos_session){}// Destructor.Sender_QoS_Event_Handler::~Sender_QoS_Event_Handler (void){}// Return the handle of the Dgram_Mcast. This method is called// internally by the reactor.ACE_HANDLESender_QoS_Event_Handler::get_handle (void) const{  return this->dgram_mcast_qos_.get_handle ();}// Handle the QoS Event. In this case send data to the receiver// using WSASendTo() that uses overlapped I/O.intSender_QoS_Event_Handler::handle_qos (ACE_HANDLE){  ACE_DEBUG ((LM_DEBUG,              "\nReceived a QOS event. Inside handle_qos ()\n"));  // We have received an RSVP event. The following update_qos () call  // calls rapi_dispatch () in case of RAPI and WSAIoctl (GET_QOS) in  // case of W2K. It then does the QoS parameter translation and updates  // the QoS session object with the latest QoS. This call replaces the  // direct call that was being made to WSAIoctl (GET_QOS) here for the  // Win2K example.  if (this->qos_session_->update_qos () == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "Error in updating QoS\n"),                      -1);  else    ACE_DEBUG ((LM_DEBUG,                " Updating QOS succeeds.\n"));  // Now proactively query the QoS object for QoS.  ACE_QoS ace_get_qos = this->qos_session_->qos ();  ACE_DEBUG ((LM_DEBUG,              "\nReceiving Flowspec :\t\t\tSending Flowspec :\n\n"              "\tToken Rate = %d\t\t\tToken Rate = %d\n"              "\tToken Bucket Size = %d\t\t\tToken Bucket Size = %d\n"              "\tPeak Bandwidth = %d\t\t\tPeak Bandwidth = %d\n"              "\tLatency = %d\t\t\t\tLatency = %d\n"              "\tDelay Variation = %d\t\t\tDelay Variation = %d\n"              "\tService Type = %d\t\t\tService Type = %d\n"              "\tMax SDU Size = %d\t\t\tMax SDU Size = %d\n"              "\tMinimum Policed Size = %d\t\tMinimum Policed Size = %d\n\n",              ace_get_qos.receiving_flowspec ()->token_rate (),              ace_get_qos.sending_flowspec ()->token_rate (),              ace_get_qos.receiving_flowspec ()->token_bucket_size (),              ace_get_qos.sending_flowspec ()->token_bucket_size (),              ace_get_qos.receiving_flowspec ()->peak_bandwidth (),              ace_get_qos.sending_flowspec ()->peak_bandwidth (),              ace_get_qos.receiving_flowspec ()->latency (),              ace_get_qos.sending_flowspec ()->latency (),              ace_get_qos.receiving_flowspec ()->delay_variation (),              ace_get_qos.sending_flowspec ()->delay_variation (),              ace_get_qos.receiving_flowspec ()->service_type (),              ace_get_qos.sending_flowspec ()->service_type (),              ace_get_qos.receiving_flowspec ()->max_sdu_size (),              ace_get_qos.sending_flowspec ()->max_sdu_size (),              ace_get_qos.receiving_flowspec ()->minimum_policed_size (),              ace_get_qos.sending_flowspec ()->minimum_policed_size ()));  // This is SPECIFIC TO WIN2K and should be done in the qos_update function.//    ACE_QoS ace_get_qos;//    u_long dwBytes;//    if (ACE_OS::ioctl (this->dgram_mcast_qos_.get_handle (),//                       ACE_SIO_GET_QOS,//                       ace_get_qos,//                       &dwBytes) == -1)//      ACE_ERROR ((LM_ERROR,//                  "Error in Qos get ACE_OS::ioctl ()\n"//                  "Bytes Returned = %d\n",//                  dwBytes));//    else//      ACE_DEBUG ((LM_DEBUG,//                  "Getting QOS using ACE_OS::ioctl () succeeds.\n"));  char* msg = "Hello sent on a QoS enabled session !!\n";  iovec iov[1];  iov[0].iov_base = msg;  iov[0].iov_len = ACE_OS::strlen(msg);  size_t bytes_sent = 0;  // Send "Hello" to the QoS session address to which the receiver has  // subscribed.  if (this->dgram_mcast_qos_.send (iov,                                   1,                                   bytes_sent,                                   0,                                   this->qos_session_->dest_addr (),                                   0,                                   0) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "Error in dgram_mcast.send ()\n"),                      -1);  else    ACE_DEBUG ((LM_DEBUG,                "Using ACE_OS::sendto () : Bytes sent : %d",                bytes_sent));  //  // create a dynamic flow spec on each callback to test QoS retransmits  //  ACE_CString flow_id ("flow_id");  Fill_ACE_QoS flow_spec_list;  ACE_DEBUG ((LM_DEBUG,              "\nA new flow spec! in QoS handler."));  static int token_rate = 9400;  ++token_rate;  static int peak_bw = 18500;  ++peak_bw;  switch (flow_spec_list.map ().bind (flow_id,                                      new ACE_Flow_Spec (token_rate,                                                         708,                                                         peak_bw,                                                         0,                                                         0,                                                         ACE_SERVICETYPE_CONTROLLEDLOAD,                                                         368,                                                         368,                                                         25,                                                         1)))    {    case 1 :       ACE_ERROR_RETURN ((LM_ERROR,                         "Unable to bind the new flow spec\n"                         "The Flow Spec name already exists\n"),                        -1);      break;    case -1 :      ACE_ERROR_RETURN ((LM_ERROR,                         "Unable to bind the new flow spec\n"),                        -1);      break;    }  //  // set up the new qos  //  ACE_QoS another_qos_sender;  if (flow_spec_list.fill_simplex_sender_qos (another_qos_sender,                                              flow_id) !=0)    ACE_ERROR_RETURN ((LM_ERROR,                       "Unable to fill handler-simplex sender qos\n"),                      -1);  else    ACE_DEBUG ((LM_DEBUG,                "Successfully built a new flowspec in handle_qos!\n"));  //  // change the qos for the current session  //  ACE_QoS_Manager qos_manager = this->dgram_mcast_qos_.qos_manager ();  ACE_DEBUG ((LM_DEBUG,              "QoS Manager was built in handle_qos!\n"));  // Set the QoS for the session. Replaces the ioctl () call that  // was being made previously.  if (this->qos_session_->qos (&this->dgram_mcast_qos_,                               &qos_manager,                               another_qos_sender) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "Unable to set QoS\n"),                      -1);  else    ACE_DEBUG ((LM_DEBUG,                "Setting QOS succeeds.\n"));    // ACE_SOCK_Dgram_Mcast_QoS dgram_mcast_qos_;  // ACE_QoS_Session *qos_session_;  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -