events_undelivered.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "events.h"
  2. #include "actorsystem.h"
  3. namespace NActors {
  4. TString TEvents::TEvUndelivered::ToStringHeader() const {
  5. return "TSystem::Undelivered";
  6. }
  7. bool TEvents::TEvUndelivered::SerializeToArcadiaStream(TChunkSerializer *serializer) const {
  8. Y_VERIFY(!Unsure); // these are local-only events generated by Interconnect
  9. return serializer->WriteString(&Data);
  10. }
  11. void TEvents::TEvUndelivered::Out(IOutputStream& o, EReason x) {
  12. switch (x) {
  13. case ReasonActorUnknown:
  14. o << "ActorUnknown";
  15. break;
  16. case Disconnected:
  17. o << "Disconnected";
  18. break;
  19. default:
  20. o << "Undefined";
  21. break;
  22. }
  23. }
  24. bool TEvents::TEvUndelivered::IsSerializable() const {
  25. return true;
  26. }
  27. IEventBase* TEvents::TEvUndelivered::Load(TEventSerializedData* bufs) {
  28. TString str = bufs->GetString();
  29. Y_VERIFY(str.size() == (sizeof(ui32) + sizeof(ui32)));
  30. const char* p = str.data();
  31. const ui64 sourceType = ReadUnaligned<ui32>(p + 0);
  32. const ui64 reason = ReadUnaligned<ui32>(p + 4);
  33. return new TEvUndelivered(sourceType, reason);
  34. }
  35. TAutoPtr<IEventHandle> IEventHandle::ForwardOnNondelivery(ui32 reason, bool unsure) {
  36. if (Flags & FlagForwardOnNondelivery) {
  37. const ui32 updatedFlags = Flags & ~(FlagForwardOnNondelivery | FlagSubscribeOnSession);
  38. const TActorId recp = OnNondeliveryHolder ? OnNondeliveryHolder->Recipient : TActorId();
  39. if (Event)
  40. return new IEventHandle(recp, Sender, Event.Release(), updatedFlags, Cookie, &Recipient, TraceId.Clone());
  41. else
  42. return new IEventHandle(Type, updatedFlags, recp, Sender, Buffer, Cookie, &Recipient, TraceId.Clone());
  43. }
  44. if (Flags & FlagTrackDelivery) {
  45. const ui32 updatedFlags = Flags & ~(FlagTrackDelivery | FlagSubscribeOnSession | FlagGenerateUnsureUndelivered);
  46. return new IEventHandle(Sender, Recipient, new TEvents::TEvUndelivered(Type, reason, unsure), updatedFlags,
  47. Cookie, nullptr, TraceId.Clone());
  48. }
  49. return nullptr;
  50. }
  51. }