Hot-reload Presence instances
This commit is contained in:
		
							parent
							
								
									b0ded8e289
								
							
						
					
					
						commit
						ac40c54e40
					
				
					 5 changed files with 15 additions and 8 deletions
				
			
		
							
								
								
									
										11
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										11
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -31,7 +31,7 @@ | |||
|         "get-relative-path": "^1.0.2", | ||||
|         "get-stream": "^6.0.1", | ||||
|         "h3": "^1.12.0", | ||||
|         "heatsync": "^2.6.0", | ||||
|         "heatsync": "^2.7.0", | ||||
|         "lru-cache": "^10.4.3", | ||||
|         "minimist": "^1.2.8", | ||||
|         "prettier-bytes": "^1.0.4", | ||||
|  | @ -1868,12 +1868,15 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/heatsync": { | ||||
|       "version": "2.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/heatsync/-/heatsync-2.6.0.tgz", | ||||
|       "integrity": "sha512-UfemOt4Kg1hvhDj/Zz8sYa1pF73ul+tF19MYNisYoOymXoTo4iCZv2BDdCMFE1xvZ6YFjcMoekb/aeBU1uqFjQ==", | ||||
|       "version": "2.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/heatsync/-/heatsync-2.7.0.tgz", | ||||
|       "integrity": "sha512-9ILOyyHFZKfIrqBmNz+fwKd+zupFE2UqFZ9k4FjRcMjNDp7GtW+K9n2htXLy3CwdDTRd6NV6BPxKvU51UqKIJA==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "backtracker": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14.6.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/html-es6cape": { | ||||
|  |  | |||
|  | @ -40,7 +40,7 @@ | |||
|     "get-relative-path": "^1.0.2", | ||||
|     "get-stream": "^6.0.1", | ||||
|     "h3": "^1.12.0", | ||||
|     "heatsync": "^2.6.0", | ||||
|     "heatsync": "^2.7.0", | ||||
|     "lru-cache": "^10.4.3", | ||||
|     "minimist": "^1.2.8", | ||||
|     "prettier-bytes": "^1.0.4", | ||||
|  |  | |||
|  | @ -38,13 +38,14 @@ const guildPresenceSetting = new class { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| class Presence { | ||||
| class Presence extends sync.ReloadableClass { | ||||
| 	/** @type {string} */ userID | ||||
| 	/** @type {{presence: "online" | "offline" | "unavailable", status_msg?: string}} */ data | ||||
| 	/** @private @type {?string | undefined} */ mxid | ||||
| 	/** @private @type {number} */ delay = Math.random() | ||||
| 
 | ||||
| 	constructor(userID) { | ||||
| 		super() | ||||
| 		this.userID = userID | ||||
| 	} | ||||
| 
 | ||||
|  | @ -66,12 +67,13 @@ class Presence { | |||
| 		// This random delay will space them out over the whole 28 second cycle.
 | ||||
| 		setTimeout(() => { | ||||
| 			api.setPresence(this.data, mxid).catch(() => {}) | ||||
| 		}, this.delay) | ||||
| 		}, this.delay * presenceLoopInterval).unref() | ||||
| 	} | ||||
| } | ||||
| sync.reloadClassMethods(Presence) | ||||
| 
 | ||||
| const presenceTracker = new class { | ||||
| 	/** @private @type {Map<string, Presence>} userID -> Presence */ presences | ||||
| 	/** @private @type {Map<string, Presence>} userID -> Presence */ presences = sync.remember(() => new Map()) | ||||
| 
 | ||||
| 	constructor() { | ||||
| 		sync.addTemporaryInterval(() => this.syncPresences(), presenceLoopInterval) | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ const eventDispatcher = sync.require("./d2m/event-dispatcher") | |||
| const updatePins = sync.require("./d2m/actions/update-pins") | ||||
| const speedbump = sync.require("./d2m/actions/speedbump") | ||||
| const ks = sync.require("./matrix/kstate") | ||||
| const setPresence = sync.require("./d2m/actions/set-presence") | ||||
| const guildID = "112760669178241024" | ||||
| 
 | ||||
| const extraContext = {} | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| // @ts-check
 | ||||
| 
 | ||||
| const {ReadableStream} = require("stream/web") | ||||
| const {test} = require("supertape") | ||||
| const {router} = require("../../test/web") | ||||
| const assert = require("assert").strict | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue