사용자:Hsl0/연구소/숫자야구 live/실시간-json.js
참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.
- 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
- 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
- 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
- 오페라: Ctrl-F5를 입력.
import {LiveClient} from '/w/index.php?title=사용자:Hsl0/연구소/숫자야구_live/실시간.js&action=raw&ctype=text/javascript';
const CLIENTS = Symbol('clients_list');
export class JSONHandler {
constructor(clients, actions = {}, config = {}) {
this.actions = actions;
if(config.handle) this.handle = config.handle;
this.handle = this.handle.bind(this);
this[CLIENTS] = new Set();
if(clients) this.connect(clients);
}
get clients() {
return [...this[CLIENTS]];
}
set(action, handler) {
if(typeof action === 'object') Object.assign(this.actions, action);
else if(typeof handler === 'function') this.actions[action] = handler;
else throw new TypeError('set 메소드에 올바른 인자를 넣지 않았습니다');
return this;
}
remove(action) {
if(typeof action === 'string' || typeof action === 'number') delete this.actions[action];
else throw new TypeError('올바른 동작 이름이 아닙니다');
return this;
}
handle({detail}) {
for(const rev of detail.revisions) {
if(rev.contentmodel && rev.contentmodel !== 'json') continue;
const content = JSON.parse(rev.content);
this.actions[content.action](content, rev);
}
}
connect(...clients) {
if(clients[0][Symbol.iterator]) clients = clients[0];
for(const client of clients) {
if(!(client instanceof LiveClient)) throw new TypeError('JSONHandler에 LiveClient가 아닌 객체를 연결하려 시도했습니다');
if(this[CLIENTS].has(client)) continue;
this[CLIENTS].add(client);
client.addEventListener('update', this.handle);
}
return this;
}
disconnect(...clients) {
if(clients[0][Symbol.iterator]) clients = clients[0];
if(clients.length <= 0) clients = this.clients;
for(const client of clients) {
if(!(client instanceof LiveClient)) throw new TypeError('JSONHandler에 LiveClient가 아닌 객체를 연결하려 시도했습니다');
if(!this[CLIENTS].has(client)) continue;
client.removeEventListener('update', this.handle);
this[CLIENTS].delete(client);
}
return this;
}
}
export * from '/w/index.php?title=사용자:Hsl0/연구소/숫자야구_live/실시간.js&action=raw&ctype=text/javascript';