session.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const Helpers = require("../utils/Helpers");
  2. const fs = require("fs").promises;
  3. const {existsSync,readFileSync} = require("fs");
  4. class Session {
  5. constructor(sessionUserId) {
  6. this.sessionUserId = sessionUserId;
  7. this.serverAddress = "149.154.167.40";
  8. this.port = 80;
  9. this.authKey = undefined;
  10. this.id = Helpers.generateRandomLong(false);
  11. this.sequence = 0;
  12. this.salt = 0n; // Unsigned long
  13. this.timeOffset = 0n;
  14. this.lastMessageId = 0n;
  15. this.user = undefined;
  16. }
  17. /**
  18. * Saves the current session object as session_user_id.session
  19. */
  20. async save() {
  21. if (this.sessionUserId) {
  22. //await fs.writeFile(`${this.sessionUserId}.session`, JSON.stringify(this));
  23. }
  24. }
  25. static tryLoadOrCreateNew(sessionUserId) {
  26. if (sessionUserId === undefined) {
  27. return new Session();
  28. }
  29. let filepath = `${sessionUserId}.session`;
  30. if (existsSync(filepath)) {
  31. return JSON.parse(readFileSync(filepath, "utf-8"));
  32. } else {
  33. return new Session(sessionUserId);
  34. }
  35. }
  36. getNewMsgId() {
  37. let msTime = new Date().getTime();
  38. let newMessageId = (BigInt(BigInt(Math.floor(msTime / 1000)) + this.timeOffset) << 32n) |
  39. (BigInt(msTime % 1000) << 22n) |
  40. (BigInt(Helpers.getRandomInt(0, 524288)) << 2n); // 2^19
  41. if (this.lastMessageId >= newMessageId) {
  42. newMessageId = this.lastMessageId + 4n;
  43. }
  44. this.lastMessageId = newMessageId;
  45. return newMessageId;
  46. }
  47. }
  48. module.exports = Session;