天天看点

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

<b>发送状态机比接收状态机相对要简单</b>

<b></b>

<b>send_machine.h</b>

#ifndef MOOON_AGENT_SEND_MACHINE_H  

#define MOOON_AGENT_SEND_MACHINE_H  

#include &lt;agent/config.h&gt;  

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;  

    const char* _cursor;  

    size_t _remain_size;   

};  

AGENT_NAMESPACE_END  

#endif // MOOON_AGENT_SEND_MACHINE_H  

<b>send_machine.cpp</b>

#include "send_machine.h" 

#include "agent_connector.h" 

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-&gt;send(_cursor, _remain_size);  

    if (bytes_sent &gt; -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;  

本文转自eyjian 51CTO博客,原文链接:http://blog.51cto.com/mooon/910295,如需转载请自行联系原作者

继续阅读