puppet.ts 1.8 KB
Newer Older
1
import { EventEmitter } from 'events'
2

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
3
import {
L
lijiarui 已提交
4
  Sayable,
5
}                       from './config'
6
import { Contact }      from './contact'
M
Mukaiu 已提交
7 8 9 10
import {
  Message,
  MediaMessage,
}                       from './message'
11 12
import { StateMonitor } from './state-monitor'
import { Room }         from './room'
13

14 15 16
// type ContactGetterFunc = {
//   (id: string): Promise<any>
// }
17

Huan (李卓桓)'s avatar
doc  
Huan (李卓桓) 已提交
18 19 20
/**
 * Abstract Puppet Class
 */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
21
export abstract class Puppet extends EventEmitter implements Sayable {
22 23
  public userId:  string  | null
  public user:    Contact | null
24 25
  public abstract getContact(id: string): Promise<any>

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
26 27
  public state = new StateMonitor<'live', 'dead'>('Puppet', 'dead')

28 29
  constructor() {
    super()
30 31
  }

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
32
  public abstract async init(): Promise<void>
33

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
34
  public abstract self(): Contact
35

M
Mukaiu 已提交
36
  public abstract send(message: Message | MediaMessage): Promise<void>
37
  public abstract say(content: string): Promise<void>
38

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
39
  public abstract reset(reason?: string): void
40 41
  public abstract logout(): Promise<void>
  public abstract quit(): Promise<void>
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
42

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
43
  public abstract ding(): Promise<string>
44

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
45 46 47
  /**
   * FriendRequest
   */
48 49 50
  public abstract friendRequestSend(contact: Contact, hello?: string): Promise<any>
  public abstract friendRequestAccept(contact: Contact, ticket: string): Promise<any>

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
51 52 53
  /**
   * Room
   */
54 55 56 57
  public abstract roomAdd(room: Room, contact: Contact): Promise<number>
  public abstract roomDel(room: Room, contact: Contact): Promise<number>
  public abstract roomTopic(room: Room, topic: string): Promise<string>
  public abstract roomCreate(contactList: Contact[], topic?: string): Promise<Room>
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
58
  public abstract roomFind(filterFunc: string): Promise<Room[]>
59

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
60 61 62
  /**
   * Contact
   */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
63
  public abstract contactFind(filterFunc: string): Promise<Contact[]>
64
  public abstract contactAlias(contact: Contact, alias: string|null): Promise<boolean>
65
}