RUNetTime.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // RUNetTime.h
  3. // red_utils
  4. //
  5. // Created by chunlin zhang on 2024/6/18.
  6. //
  7. #ifndef RUNetTime_h
  8. #define RUNetTime_h
  9. #include "cocos2d.h"
  10. #include "RUDefine.h"
  11. NS_RU_BEGIN
  12. class NetTime : public cocos2d::Ref{
  13. private:
  14. NetTime();
  15. ~NetTime();
  16. public:
  17. /// 获取联网时间的管理单例
  18. static NetTime* getInstance();
  19. /// 应用程序从后台返回调用,用于同步服务器时间(如果需要使用这个类,请在游戏开始时和从后台返回前台时调用这个函数)
  20. void enterForeground();
  21. /// 获取当前时间(返回一个时间戳,如果没有和服务器同步时间则返回0)
  22. int getCurrentTime();
  23. /// 获取当前时间,考虑用户时区
  24. int getCurrentTimeWithTimeZone();
  25. /// 获取用户设备的本地时间
  26. int getUserDeviceTime();
  27. public://一些工具函数
  28. /// 获取所给时间戳所在星期中某一天的某时刻时间戳
  29. /// @param curTime 需要定位的所在时间戳
  30. /// @param weekDay 需要定位周几
  31. /// @param hour 需要定位那一天的几点钟
  32. int getTimeInThisWeek(int curTime, int weekDay, int hour);
  33. /// 获取所给时间戳所在月份中的某一天某时刻的时间戳
  34. /// @param curTime 需要定位的所在时间戳
  35. /// @param day 需要定位的天
  36. /// @param hour 需要定位那一天的几点钟
  37. int getTimeInTheMonth(int curTime, int day, int hour);
  38. /// 获取所给时间戳当天某一时刻的时间戳
  39. int getTimeInCurDay(int curTime, int hour);
  40. /// 获取所给时间戳下一天某一时刻的时间戳
  41. int getTimeInNextDay(int curTime, int hour);
  42. /// 获取某个月有多少秒
  43. int getMonthlySecond(long curTime);
  44. private:
  45. /// 初始化时间管理类
  46. void initNetTime();
  47. private://时区相关函数
  48. /// 记录用户的时区
  49. void recordUserTimeZoneOffset();
  50. /// 获取用户的时区
  51. int getUserTimeZoneOffset();
  52. /// 根据时区转换时间函数
  53. /// @param utcTime 世界标准时间戳
  54. /// @param timeZoneOffset 相对于标准时间戳的秒数偏移(例如东八区偏移8小时,所以这个值为3600*8 = 28800)
  55. int convertToUserTimezone(int utcTime, int timeZoneOffset);
  56. private:
  57. float _timeStamp = 0.0f;//计时时间戳,用来维护同步之后的时间
  58. int _systemUpTimeAnchor = 0;//系统时间锚点,指同步服务器时间时标记的系统时间
  59. int _netTimeAnchor = 0;//服务器时间锚点,指同步服务器时间时标记的服务器时间戳
  60. };
  61. #define SceheduleKey_RUNetTime_Sceheduler "SceheduleKey_RUNetTime_Sceheduler" //用来维护本地计时的计时器键值
  62. #define SceheduleKey_RUNetTime_checkNetSync "SceheduleKey_RUNetTime_checkNetSync" //同步检查,如果没同步到每隔一段时间重新同步
  63. #define UserDefaultKey_RUNetTime_TimeZoneRecord "UserDefaultKey_RUNetTime_TimeZoneRecord" //用来保存是否记录了时区偏移
  64. #define UserDefaultKey_RUNetTime_TimeZoneOffset "UserDefaultKey_RUNetTime_TimeZoneOffset" //用来记录用户时区偏移(单位:秒)的键值
  65. NS_RU_END
  66. #endif /* RUNetTime_h */