• mooonagent发送状态机代码摘要


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

    • send_machine.h

    点击(此处)折叠或打开

    1. #ifndef MOOON_AGENT_SEND_MACHINE_H
    2. #define MOOON_AGENT_SEND_MACHINE_H
    3. #include <agent/config.h>
    4. AGENT_NAMESPACE_BEGIN

    5. class CAgentConnector;
    6. class CSendMachine
    7. {
    8. public:
    9.     CSendMachine(CAgentConnector* connector);
    10.     bool is_finish() const;
    11.     util::handle_result_t continue_send();
    12.     util::handle_result_t send(const char* msg, size_t msg_size);
    13.     void reset();
    14.     
    15. private:
    16.     CAgentConnector* _connector;
    17.     
    18. private:
    19.     const char* _cursor;
    20.     size_t _remain_size;
    21. };

    22. AGENT_NAMESPACE_END
    23. #endif // MOOON_AGENT_SEND_MACHINE_H

    • send_machine.cpp

    点击(此处)折叠或打开

    1. #include "send_machine.h"
    2. #include "agent_connector.h"
    3. AGENT_NAMESPACE_BEGIN

    4. CSendMachine::CSendMachine(CAgentConnector* connector)
    5.  :_connector(connector)
    6. {
    7.     reset();
    8. }

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

    14. // 发送消息,可能是一个消息的第一次发送,也可能是一个消息的非第一次发送
    15. util::handle_result_t CSendMachine::continue_send()
    16. {
    17.     ssize_t bytes_sent = _connector->send(_cursor, _remain_size);
    18.     if (bytes_sent > -1)
    19.     {
    20.         _cursor += bytes_sent;
    21.         _remain_size -= bytes_sent;
    22.     }
    23.     
    24.     return is_finish()
    25.          ? util::handle_finish
    26.          : util::handle_continue;
    27. }

    28. // 发送消息,总是一个消息的第一次发送
    29. // 参数说明:
    30. // msg - 需要发送的消息
    31. // msg_size - 需要发送的消息字节数
    32. util::handle_result_t CSendMachine::send(const char* msg, size_t msg_size)
    33. {
    34.     _cursor = msg;
    35.     _remain_size = msg_size;
    36.     
    37.     return continue_send();
    38. }

    39. void CSendMachine::reset()
    40. {
    41.     _cursor = NULL;
    42.     _remain_size = 0;
    43. }

    44. AGENT_NAMESPACE_END

  • 相关阅读:
    [LeetCode] Insertion Sort List
    [LeetCode] Sort List
    [国嵌攻略][162][USB协议分析]
    [国嵌攻略][161][USB总线介绍]
    [国嵌攻略][160][SPI驱动程序设计]
    [国嵌攻略][159][SPI子系统]
    [国嵌攻略][158][SPI裸机驱动设计]
    [国嵌攻略][157][SPI总线介绍]
    [国嵌攻略][156][I2C自编设备驱动设计]
    ueditor 单独图片上传 转载
  • 原文地址:https://www.cnblogs.com/aquester/p/9891823.html
Copyright © 2020-2023  润新知