@@ -9,31 +9,27 @@ import { Terminal, IDisposable, ITerminalAddon } from 'xterm';
9
9
10
10
interface IAttachOptions {
11
11
bidirectional ?: boolean ;
12
- inputUtf8 ?: boolean ;
13
12
}
14
13
15
14
export class AttachAddon implements ITerminalAddon {
16
15
private _socket : WebSocket ;
17
16
private _bidirectional : boolean ;
18
- private _utf8 : boolean ;
19
17
private _disposables : IDisposable [ ] = [ ] ;
20
18
21
19
constructor ( socket : WebSocket , options ?: IAttachOptions ) {
22
20
this . _socket = socket ;
23
21
// always set binary type to arraybuffer, we do not handle blobs
24
22
this . _socket . binaryType = 'arraybuffer' ;
25
23
this . _bidirectional = ( options && options . bidirectional === false ) ? false : true ;
26
- this . _utf8 = ! ! ( options && options . inputUtf8 ) ;
27
24
}
28
25
29
26
public activate ( terminal : Terminal ) : void {
30
- if ( this . _utf8 ) {
31
- this . _disposables . push ( addSocketListener ( this . _socket , 'message' ,
32
- ( ev : MessageEvent | Event | CloseEvent ) => terminal . writeUtf8 ( new Uint8Array ( ( ev as any ) . data as ArrayBuffer ) ) ) ) ;
33
- } else {
34
- this . _disposables . push ( addSocketListener ( this . _socket , 'message' ,
35
- ( ev : MessageEvent | Event | CloseEvent ) => terminal . write ( ( ev as any ) . data as string ) ) ) ;
36
- }
27
+ this . _disposables . push (
28
+ addSocketListener ( this . _socket , 'message' , ev => {
29
+ const data : ArrayBuffer | string = ev . data ;
30
+ terminal . write ( typeof data === 'string' ? data : new Uint8Array ( data ) ) ;
31
+ } )
32
+ ) ;
37
33
38
34
if ( this . _bidirectional ) {
39
35
this . _disposables . push ( terminal . onData ( data => this . _sendData ( data ) ) ) ;
@@ -57,7 +53,7 @@ export class AttachAddon implements ITerminalAddon {
57
53
}
58
54
}
59
55
60
- function addSocketListener ( socket : WebSocket , type : string , handler : ( this : WebSocket , ev : MessageEvent | Event | CloseEvent ) => any ) : IDisposable {
56
+ function addSocketListener < K extends keyof WebSocketEventMap > ( socket : WebSocket , type : K , handler : ( this : WebSocket , ev : WebSocketEventMap [ K ] ) => any ) : IDisposable {
61
57
socket . addEventListener ( type , handler ) ;
62
58
return {
63
59
dispose : ( ) => {
0 commit comments