Caching is still being designed but it _will_ be written in typescript to a more well docc'ed api for everything else

+ Basically im doing this to straight up abuse
- Moving cache types + methods to their own module
This commit is contained in:
shockrah 2021-03-12 02:20:00 -08:00
parent 9ce04e96a7
commit 5b2e92da06
2 changed files with 64 additions and 36 deletions

View File

@ -0,0 +1,63 @@
import { ServerConfig, Message, Channel } from './types';
export class ServerCache {
channels: Array<Channel>
// Channel id's are used to key into the list of messages for that given channel
messages: Map<Number, Array<Message>>
config: ServerConfig
constructor(config: ServerConfig, channels: Array<Channel>, messages: Array<Message>) {
this.config = config
this.channels = channels
for(const message of messages) {
const ref = this.messages.get(message.cid)
if(!ref) {
this.messages.set(message.cid, [message])
} else {
ref.push(message)
}
}
}
url(): String{
let url = `${this.config.protocol}://${this.config.hostname}`
// Only add the port WITH THE COLON if the config requires it
if(this.config.port) {
url += `:${this.config.port}`
}
return url
}
push_message(message: Message) {
let ref = this.messages.get(message.cid)
if(ref) {
ref.push(message)
} else {
this.messages.set(message.cid, [message])
}
}
}
export class Cache {
// hostname -> Cache
servers: Map<String, ServerCache>
constructor(servers: Array<ServerCache>) {
for(const server of servers) {
const hostname = server.config.hostname
this.servers.set(hostname, server)
}
}
add_message(hostname: String, message: Message) {
let ref = this.servers.get(hostname)
if(!ref) {
throw `No server config found for ${hostname}`
}
ref.push_message(message)
}
}

View File

@ -19,6 +19,7 @@ export class Message {
this.type = type
// throw away the content if its not of a valid type
if(this.TYPES.indexOf(content) == -1) {
this.content = null
} else {
@ -53,40 +54,4 @@ export class ServerConfig {
}
}
////////////////////////////////////////////////////////////////////////////////
//
//
// Server Cache Types
//
// These types are defined for the net-cache system so that client apps can more
// intelligently make network requests.
////////////////////////////////////////////////////////////////////////////////
export class ServerCache {
channels: Array<Channel>
// Channel id's are used to key into the list of messages for that given channel
messages: Map<Number, Array<Message>>
config: ServerConfig
constructor(config: ServerConfig, channels: Array<Channel>, messages: Array<Message>) {
this.config = config
this.channels = channels
for(const message of messages) {
const ref = this.messages.get(message.cid)
if(!ref) {
this.messages.set(message.cid, [message])
} else {
ref.push(message)
}
}
}
}
export class Cache {
servers: Array<ServerCache>
constructor(servers: Array<ServerCache>) {
this.servers = servers // good chance this will be null on init but thats ok
}
}