前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mooon-agent发送状态机代码摘要

mooon-agent发送状态机代码摘要

作者头像
一见
发布2018-08-07 15:38:39
2470
发布2018-08-07 15:38:39
举报
文章被收录于专栏:蓝天

发送状态机比接收状态机相对要简单

  • send_machine.h
代码语言:javascript
复制
 #ifndef MOOON_AGENT_SEND_MACHINE_H
#define MOOON_AGENT_SEND_MACHINE_H
#include <agent/config.h>
AGENT_NAMESPACE_BEGIN

class CAgentConnector;
class CSendMachine
{
public:
    CSendMachine(CAgentConnector* connector);
    bool is_finish() const;
    util::handle_result_t continue_send();
    util::handle_result_t send(const char* msg, size_t msg_size);
    void reset();
    
private:
    CAgentConnector* _connector;
    
private:
    const char* _cursor;
    size_t _remain_size; 
};

AGENT_NAMESPACE_END
#endif // MOOON_AGENT_SEND_MACHINE_H
  • send_machine.cpp
代码语言:javascript
复制
 #include "send_machine.h"
#include "agent_connector.h"
AGENT_NAMESPACE_BEGIN

CSendMachine::CSendMachine(CAgentConnector* connector)
 :_connector(connector) 
{
    reset();
}

// 当前消息是否已经发送完
bool CSendMachine::is_finish() const
{
    return 0 == _remain_size;
}

// 发送消息,可能是一个消息的第一次发送,也可能是一个消息的非第一次发送
util::handle_result_t CSendMachine::continue_send()
{
    ssize_t bytes_sent = _connector->send(_cursor, _remain_size);
    if (bytes_sent > -1)
    {
        _cursor += bytes_sent;
        _remain_size -= bytes_sent;
    }
    
    return is_finish() 
         ? util::handle_finish 
         : util::handle_continue;
}

// 发送消息,总是一个消息的第一次发送
// 参数说明:
// msg - 需要发送的消息
// msg_size - 需要发送的消息字节数
util::handle_result_t CSendMachine::send(const char* msg, size_t msg_size)
{
    _cursor = msg;
    _remain_size = msg_size;
    
    return continue_send();
}

void CSendMachine::reset()
{
    _cursor = NULL;
    _remain_size = 0;
}

AGENT_NAMESPACE_END
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012/06/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档