add T2
This commit is contained in:
@@ -1,98 +0,0 @@
|
|||||||
import { RPCExporter, SubscriptionResponse, ErrorResponse, SuccessResponse } from "rpclibrary";
|
|
||||||
import { FrontworkAdmin } from "../Admin/Admin";
|
|
||||||
import { TableDefinitionExporter } from "../Types/Interfaces";
|
|
||||||
import { getLogger } from 'frontblock-generic/Types';
|
|
||||||
|
|
||||||
import * as uuid from 'uuid/v4'
|
|
||||||
import { TableDefiniton } from "../Types/Types";
|
|
||||||
|
|
||||||
export type NotificationSeverity = 'Info' | 'Important' | 'Error'
|
|
||||||
|
|
||||||
export type Notification = {
|
|
||||||
ID?:number,
|
|
||||||
severity: NotificationSeverity,
|
|
||||||
topic: string,
|
|
||||||
message:string,
|
|
||||||
time?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
export type EventbusIfc = {
|
|
||||||
Eventbus: {
|
|
||||||
getNotificationLog: () => Promise<Notification[]>
|
|
||||||
pushNotification: (notification:Notification) => Promise<void>
|
|
||||||
subscribeNotifications: (callback:Function) => Promise<SubscriptionResponse | ErrorResponse>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const logger = getLogger("Eventbus", 'debug')
|
|
||||||
|
|
||||||
export class FrontworkEventBus
|
|
||||||
implements RPCExporter<EventbusIfc, "Eventbus">, TableDefinitionExporter {
|
|
||||||
name = "Eventbus" as "Eventbus"
|
|
||||||
private subscriptions : { [uid in string]:Function } = {}
|
|
||||||
|
|
||||||
constructor(private admin: FrontworkAdmin){
|
|
||||||
}
|
|
||||||
|
|
||||||
async subscribeNotifications(callback) : Promise<SubscriptionResponse>{
|
|
||||||
const uid = uuid()
|
|
||||||
this.subscriptions[uid] = callback
|
|
||||||
return { result: 'Success', uuid: uid }
|
|
||||||
}
|
|
||||||
|
|
||||||
async getNotificationLog() : Promise<Notification[]>{
|
|
||||||
try{
|
|
||||||
return await this.admin.knex.select('*').from('notifications')
|
|
||||||
}catch(e){
|
|
||||||
logger.error(e)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async unsubscribeNotifications(uid:string) : Promise<SuccessResponse | ErrorResponse>{
|
|
||||||
if(!this.subscriptions[uid]) return { result: 'Error', message: "Unknown subscription" }
|
|
||||||
delete this.subscriptions[uid]
|
|
||||||
return { result: 'Success' }
|
|
||||||
}
|
|
||||||
|
|
||||||
async pushNotification(notification: Notification){
|
|
||||||
if(!notification.time) notification.time = Date.now()
|
|
||||||
logger.debug("inserting into notifications", notification)
|
|
||||||
try{
|
|
||||||
await this.admin.knex('notifications').insert(notification)
|
|
||||||
}catch(e){
|
|
||||||
logger.error(e)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.values(this.subscriptions).forEach(callback => {
|
|
||||||
callback(notification)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
exportRPCs(){
|
|
||||||
return [{
|
|
||||||
name: 'getNotificationLog' as 'getNotificationLog',
|
|
||||||
call: this.getNotificationLog
|
|
||||||
},{
|
|
||||||
name: 'pushNotification' as 'pushNotification',
|
|
||||||
call: this.pushNotification
|
|
||||||
},{
|
|
||||||
name: 'subscribeNotificaitons' as 'subscribeNotifications',
|
|
||||||
hook: async (callback: Function) => await this.subscribeNotifications(callback)
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
|
|
||||||
getTableDefinitions(): TableDefiniton[]{
|
|
||||||
return [{
|
|
||||||
name: 'notifications',
|
|
||||||
tableBuilder: (table) => {
|
|
||||||
table.increments('ID').primary();
|
|
||||||
table.string('severity');
|
|
||||||
table.string('topic');
|
|
||||||
table.string('message');
|
|
||||||
table.timestamp('time');
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { SubscriptionResponse } from "rpclibrary"
|
import { SubscriptionResponse } from "rpclibrary"
|
||||||
|
|
||||||
export class IPubSub<UpdateType>{
|
export class IPubSub<UpdateType>{
|
||||||
publish: (topic: string, p: UpdateType) => void
|
publish: (topic: string, p: UpdateType) => Promise<void>
|
||||||
subscribe: (topic:string, callback: (p:UpdateType)=>any) => Promise<SubscriptionResponse>
|
subscribe: (topic:string, callback: (p:UpdateType)=>any) => Promise<SubscriptionResponse>
|
||||||
unsubscribe: (uuid: string) => Promise<void>
|
unsubscribe: (uuid: string) => Promise<void>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,63 @@ export const T2:string[] = [
|
|||||||
"Band of Dark Dominion",
|
"Band of Dark Dominion",
|
||||||
"Draconic Avenger",
|
"Draconic Avenger",
|
||||||
"Interlaced Shadow Jerkin",
|
"Interlaced Shadow Jerkin",
|
||||||
"Ringo's Blizzard Boots"
|
"Ringo's Blizzard Boots",
|
||||||
|
"Scrolls of Blinding Light",
|
||||||
|
"Rune of Metamorphosis",
|
||||||
|
"Natural Alignment Crystal",
|
||||||
|
"Mind Quickening Gem",
|
||||||
|
"Lifegiving Gem",
|
||||||
|
"Arcane Infused Gem",
|
||||||
|
"The Black Book",
|
||||||
|
"Venomous Totem",
|
||||||
|
"Nemesis Spaulders",
|
||||||
|
"Nemesis Robes",
|
||||||
|
"Nemesis Bracers",
|
||||||
|
"Nemesis Gloves",
|
||||||
|
"Nemesis Belt",
|
||||||
|
"Nemesis Boots",
|
||||||
|
"Netherwind Mantle",
|
||||||
|
"Netherwind Robes",
|
||||||
|
"Netherwind Bindings",
|
||||||
|
"Netherwind Gloves",
|
||||||
|
"Netherwind Belt",
|
||||||
|
"Netherwind Boots",
|
||||||
|
"Bloodfang Spaulders",
|
||||||
|
"Bloodfang Chestpiece",
|
||||||
|
"Bloodfang Bracers",
|
||||||
|
"Bloodfang Gloves",
|
||||||
|
"Bloodfang Belt",
|
||||||
|
"Bloodfang Boots",
|
||||||
|
"Stormrage Pauldrons",
|
||||||
|
"Stormrage Chestguard",
|
||||||
|
"Stormrage Bracers",
|
||||||
|
"Stormrage Handguards",
|
||||||
|
"Stormrage Belt",
|
||||||
|
"Stormrage Boots",
|
||||||
|
"Dragonstalker's Spaulders",
|
||||||
|
"Dragonstalker's Breastplate",
|
||||||
|
"Dragonstalker's Bracers",
|
||||||
|
"Dragonstalker's Guantlets",
|
||||||
|
"Dragonstalker's Belt",
|
||||||
|
"Dragonstalker's Greaves",
|
||||||
|
"Judgement Spaulders",
|
||||||
|
"Judgement Breastplate",
|
||||||
|
"Judgement Bindings",
|
||||||
|
"Judgement Guantlets",
|
||||||
|
"Judgement Belt",
|
||||||
|
"Judgement Sabatons",
|
||||||
|
"Pauldrons of Transcendence",
|
||||||
|
"Robes of Transcendence",
|
||||||
|
"Bindings of Transcendence",
|
||||||
|
"Handguards of Transcendence",
|
||||||
|
"Belt of Transcendence",
|
||||||
|
"Boots of Transcendence",
|
||||||
|
"Pauldrons of Wrath",
|
||||||
|
"Breastplate of Wrath",
|
||||||
|
"Bracelets of Wrath",
|
||||||
|
"Guantlets of Wrath",
|
||||||
|
"Waistband of Wrath",
|
||||||
|
"Sabatons of Wrath"
|
||||||
]
|
]
|
||||||
|
|
||||||
export type AllItems = {
|
export type AllItems = {
|
||||||
|
|||||||
Reference in New Issue
Block a user