msg.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "msg.hpp"
  2. using namespace aFuncore;
  3. using namespace aFuntool;
  4. NormalMessage::NormalMessage(Object *obj) : TopMessage("NORMAL") {
  5. this->obj = obj;
  6. }
  7. NormalMessage::~NormalMessage(){
  8. this->obj = nullptr;
  9. }
  10. void NormalMessage::topProgress(){
  11. printf_stdout(0, "NORMAL: %p\n", obj);
  12. }
  13. MessageStream::MessageStream(){
  14. stream = nullptr;
  15. }
  16. MessageStream::~MessageStream(){
  17. for (Message *msg = stream, *tmp; msg != nullptr; msg = tmp) {
  18. tmp = msg->next;
  19. delete msg;
  20. }
  21. }
  22. /**
  23. * 压入 Message
  24. * @param msg Message
  25. */
  26. void MessageStream::pushMessage(Message *msg){
  27. msg->next = stream;
  28. stream = msg;
  29. }
  30. /**
  31. * 获取 Message
  32. * @param type 类型
  33. * @return Message
  34. */
  35. Message *MessageStream::_getMessage(const std::string &type) const{
  36. for (Message *msg = stream; msg != nullptr; msg = msg->next) {
  37. if (msg->type == type)
  38. return msg;
  39. }
  40. return nullptr;
  41. }
  42. /**
  43. * 弹出Message (使Message脱离数据流)
  44. * @param type 类型
  45. * @return Message
  46. */
  47. Message *MessageStream::popMessage(const std::string &type) {
  48. for (Message **msg = &stream; *msg != nullptr; msg = &((*msg)->next)) {
  49. if ((*msg)->type == type) {
  50. Message *ret = *msg;
  51. *msg = ret->next;
  52. return ret;
  53. }
  54. }
  55. return nullptr;
  56. }
  57. UpMessage::UpMessage(const UpMessage *old) : MessageStream() {
  58. if (old != nullptr)
  59. this->old = old->stream;
  60. else
  61. this->old = nullptr;
  62. this->stream = this->old;
  63. }
  64. UpMessage::~UpMessage(){
  65. if (old != nullptr) {
  66. for (Message **msg = &stream; *msg != nullptr; msg = &((*msg)->next)) {
  67. if (*msg == old) {
  68. *msg = nullptr;
  69. break;
  70. }
  71. }
  72. }
  73. }
  74. /**
  75. * 弹出Message (使Message脱离数据流)
  76. * 注意: 不会弹出继承的Message
  77. * @param type 类型
  78. * @return Message
  79. */
  80. Message *UpMessage::popMessage(const std::string &type){
  81. for (Message **msg = &stream; *msg != nullptr; msg = &((*msg)->next)) {
  82. if ((*msg) == old)
  83. break;
  84. if ((*msg)->type == type) {
  85. Message *ret = *msg;
  86. *msg = ret->next;
  87. return ret;
  88. }
  89. }
  90. return nullptr;
  91. }
  92. /**
  93. * 拼接数据流
  94. * @param msg
  95. */
  96. void DownMessage::joinMsg(DownMessage *msg){
  97. Message *m = stream;
  98. if (m == nullptr)
  99. return;
  100. while (m->next != nullptr)
  101. m = m->next;
  102. m->next = msg->stream;
  103. msg->stream = m;
  104. stream = nullptr;
  105. }