Angular WebSocket

/**
 * websocket服务
 */
import {HttpClient} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Observable} from "rxjs";
import {Subject} from 'rxjs';
import {BaseService} from "./base.service";

@Injectable()
export class  WebSocketService extends BaseService{
    ws: WebSocket;
    url: string;
    memberId: string;

    private heart: Subject<any> = new Subject<any>(); //监听心跳
    private message: Subject<any> = new Subject<any>(); //监听心跳

    constructor(public http: HttpClient) {
        super();
    }

    setMember(memberId: string) {
        this.memberId = memberId;
        this.url = this.BASE_WSURL;
    }

    getMember() {
        return this.memberId;
    }

    /**
     * 创建websocket
     * @param url
     */
    createObservableScoket(url: string): Observable<any> {
        this.ws = new WebSocket(this.BASE_WSURL);
        return new Observable(observer => {
            // 返回成功时执行的方法
            this.ws.onmessage = event => observer.next(event.data);
            // 返回错误时执行的方法
            this.ws.onerror = event => {
                console.log("websocket异常:" + event);
               // this.initializeWebSocket()
            };
            // 关闭websocket流时执行的方法
            // this.ws.onclose = event => observer.complete();
            this.ws.onclose = event => {
                console.log("服务器关闭了链接");
               // this.initializeWebSocket()
            };

            // this.ws.onopen = event => {
            //     return observer.next('open');
            // }
        });
    }

    /**
     *
     * @param msg 发送消息
     */
    sendMessage(msg: any) {
        msg.memberId = this.memberId;
        this.ws.send(JSON.stringify(msg));
    }

    /**
     * 初始化websocekt
     */
    initializeWebSocket() {
        this.createObservableScoket(this.url).subscribe(
            data => {
                this.analysisMessage(data);
            },
            error => {
                console.log("websoclet异常:" + error);
            },
            () => console.log("webSocket已结束!")
        );

    }

    /**
     * 返回心跳
     */
    getHeart(): Observable<any> {
        return this.heart.asObservable();
    }

    /**
     * 返回消息
     */
    getMessage(): Observable<any> {
        return this.message.asObservable();
    }

    /**
     * 关闭websocket
     */
    closeWebSocket() {
        this.ws.close();
    }

    /**
     * 发送心跳
     */
    pong() {
        // this.ws.send(AppApi.api_websocket_heart);
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值