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

📄 fragment.cpp

📁 ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识
💻 CPP
字号:
// file      : ace/RMCast/Fragment.cpp// author    : Boris Kolpackov <boris@kolpackov.net>// cvs-id    : $Id: Fragment.cpp 78774 2007-07-04 06:06:59Z sowayaa $#include "Fragment.h"/*#include <iostream>using std::cerr;using std::endl;*/namespace ACE_RMCast{  Fragment::  Fragment (Parameters const& params)      : params_ (params),        sn_ (1)  {  }  void Fragment::send (Message_ptr m)  {    if (Data const* data = static_cast<Data const*> (m->find (Data::id)))    {      size_t max_payload_size (        params_.max_packet_size () - max_service_size);      if (data->size () <= max_payload_size)      {        u64 sn;        {          Lock l (mutex_);          sn = sn_++;        }        m->add (Profile_ptr (new SN (sn)));        out_->send (m);        return;      }      char const* p = data->buf ();      size_t size (data->size ());      // Need fragmentation.      //      u32 packets (size / max_payload_size + (size % max_payload_size ? 1 : 0));      // cerr << "size : " << size << endl      //      << "packs: " << packets << endl;      for (u32 i (1); i <= packets; ++i)      {        Message_ptr part (new Message);        size_t s (i == packets ? size % max_payload_size : max_payload_size);        // cerr << "pack: " << s << endl;        u64 sn;        {          Lock l (mutex_);          sn = sn_++;        }        part->add (Profile_ptr (new SN (sn)));        part->add (Profile_ptr (new Part (i, packets, size)));        part->add (Profile_ptr (new Data (p, s)));        out_->send (part);        p += s;      }    }  }}

⌨️ 快捷键说明

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