本文共 1469 字,大约阅读时间需要 4 分钟。
- #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
- #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
本文转自eyjian 51CTO博客,原文链接:http://blog.51cto.com/mooon/910295
,如需转载请自行联系原作者