/**
 * Copyright 2020 Google Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ import { ConnectionTransport } from './ConnectionTransport.js' ; export class BrowserWebSocketTransport implements ConnectionTransport { static create ( url ) { return new Promise ( ( resolve , reject ) => { const ws = new WebSocket ( url ) ; ws . addEventListener ( 'open' , ( ) => resolve ( new BrowserWebSocketTransport ( ws ) ) ) ; ws . addEventListener ( 'error' , reject ) ; } ) ; } private _ws : WebSocket ; onmessage ? : ( message : string ) => void ; onclose ? : ( ) => void ; constructor ( ws ) { this . _ws = ws ; this . _ws . addEventListener ( 'message' , ( event ) => { if ( this . onmessage ) this . onmessage . call ( null , event . data ) ; } ) ; this . _ws . addEventListener ( 'close' , ( ) => { if ( this . onclose ) this . onclose . call ( null ) ; } ) ; this . _ws . addEventListener ( 'error' , ( ) => { } ) ; this . onmessage = null ; this . onclose = null ; } send ( message ) { this . _ws . send ( message ) ; } close ( ) { this . _ws . close ( ) ; } }