EventObject.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * This is the source code of tgnet library v. 1.1
  3. * It is licensed under GNU GPL v. 2 or later.
  4. * You should have received a copy of the license in this archive (see LICENSE).
  5. *
  6. * Copyright Nikolai Kudashov, 2015-2018.
  7. */
  8. #include <unistd.h>
  9. #include <sys/eventfd.h>
  10. #include "EventObject.h"
  11. #include "Connection.h"
  12. #include "Timer.h"
  13. EventObject::EventObject(void *object, EventObjectType type) {
  14. eventObject = object;
  15. eventType = type;
  16. }
  17. void EventObject::onEvent(uint32_t events) {
  18. switch (eventType) {
  19. case EventObjectTypeConnection: {
  20. Connection *connection = (Connection *) eventObject;
  21. connection->onEvent(events);
  22. break;
  23. }
  24. case EventObjectTypeTimer: {
  25. Timer *timer = (Timer *) eventObject;
  26. timer->onEvent();
  27. break;
  28. }
  29. case EventObjectTypePipe: {
  30. int *pipe = (int *) eventObject;
  31. char ch;
  32. ssize_t size = 1;
  33. while (size > 0) {
  34. size = read(pipe[0], &ch, 1);
  35. }
  36. break;
  37. }
  38. case EventObjectTypeEvent: {
  39. int *eventFd = (int *) eventObject;
  40. uint64_t count;
  41. eventfd_read(eventFd[0], &count);
  42. break;
  43. }
  44. default:
  45. break;
  46. }
  47. }