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

📄 acknowledge.h

📁 ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识
💻 H
字号:
// file      : ace/RMCast/Acknowledge.h// author    : Boris Kolpackov <boris@kolpackov.net>// cvs-id    : $Id: Acknowledge.h 68756 2005-10-16 14:31:48Z schmidt $#ifndef ACE_RMCAST_ACKNOWLEDGE_H#define ACE_RMCAST_ACKNOWLEDGE_H#include "ace/Hash_Map_Manager.h"#include "ace/Thread_Manager.h"#include "Stack.h"#include "Protocol.h"#include "Bits.h"#include "Parameters.h"#if !defined (ACE_RMCAST_DEFAULT_MAP_SIZE)#define ACE_RMCAST_DEFAULT_MAP_SIZE 10#endif /* ACE_RMCAST_DEFAULT_MAP_SIZE */#if !defined (ACE_RMCAST_DEFAULT_QUEUE_SIZE)#define ACE_RMCAST_DEFAULT_QUEUE_SIZE 10#endif /* ACE_RMCAST_DEFAULT_QUEUE_SIZE */namespace ACE_RMCast{  class Acknowledge : public Element  {  public:    Acknowledge (Parameters const& params);    virtual void    in_start (In_Element* in);    virtual void    out_start (Out_Element* out);    virtual void    out_stop ();  public:    virtual void    recv (Message_ptr m);    virtual void    send (Message_ptr m);  // Sun C++ 5.4 can't handle private here.  //  // private:  public:    struct Descr    {      //@@ There should be no default c-tor.      //      Descr ()          : nak_count_ (0), timer_ (1)      {      }      Descr (unsigned long timer)          : nak_count_ (0), timer_ (timer)      {      }      Descr (Message_ptr m)          : m_ (m)      {      }    public:      bool      lost () const      {        return m_.get () == 0;      }    public:      Message_ptr      msg ()      {        return m_;      }      void      msg (Message_ptr m)      {        m_ = m;      }    public:      unsigned long      nak_count () const      {        return nak_count_;      }      void      nak_count (unsigned long v)      {        nak_count_ = v;      }      unsigned long      timer () const      {        return timer_;      }      void      timer (unsigned long v)      {        timer_ = v;      }    private:      Message_ptr m_;      unsigned long nak_count_;      unsigned long timer_;    };  private:    struct Queue : ACE_Hash_Map_Manager<u64, Descr, ACE_Null_Mutex>    {      typedef ACE_Hash_Map_Manager<u64, Descr, ACE_Null_Mutex> Base;      // Should never be here but required by ACE_Hash_Blah_Blah.      //      Queue ()          : Base (ACE_RMCAST_DEFAULT_MAP_SIZE), sn_ (0), max_sn_ (0)      {      }      Queue (u64 sn)        : Base (ACE_RMCAST_DEFAULT_MAP_SIZE), sn_ (sn), max_sn_ (sn)      {      }      Queue (Queue const& q)        : Base (ACE_RMCAST_DEFAULT_MAP_SIZE), sn_ (q.sn_), max_sn_ (sn_)      {        for (Queue::const_iterator i (q), e (q, 1); i != e; ++i)        {          bind ((*i).ext_id_, (*i).int_id_);        }      }    public:      int      bind (u64 sn, Descr const& d)      {        int r (Base::bind (sn, d));        if (r == 0 && sn > max_sn_) max_sn_ = sn;        return r;      }      int      rebind (u64 sn, Descr const& d)      {        int r (Base::rebind (sn, d));        if (r == 0 && sn > max_sn_) max_sn_ = sn;        return r;      }      int      unbind (u64 sn)      {        int r (Base::unbind (sn));        if (r == 0 && sn == max_sn_)        {          for (--max_sn_; max_sn_ >= sn_; --max_sn_)          {            if (find (max_sn_) == 0) break;          }        }        return r;      }    public:      u64      sn () const      {        return sn_;      }      void      sn (u64 sn)      {        sn_ = sn;      }      u64      max_sn () const      {        if (current_size () == 0) return sn_;        return max_sn_;      }    private:      u64 sn_, max_sn_;    };    typedef    ACE_Hash_Map_Manager_Ex<Address,                            Queue,                            AddressHasher,                            ACE_Equal_To<Address>,                            ACE_Null_Mutex>    Map;  private:    void    collapse (Queue& q);    void    track ();    void    track_queue (Address const& addr, Queue& q, Messages& msgs);    Profile_ptr    create_nrtm (u32 max_elem);    static ACE_THR_FUNC_RETURN    track_thunk (void* obj);  private:    Parameters const& params_;    Map hold_;    Mutex mutex_;    Condition cond_;    unsigned long nrtm_timer_;    bool stop_;    ACE_Thread_Manager tracker_mgr_;  };}#endif  // ACE_RMCAST_ACKNOWLEDGE_H

⌨️ 快捷键说明

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