ngx-rs-ant 1.0.4 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,64 +2,44 @@ import { Component, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../data-grid.service";
4
4
  import * as i2 from "@angular/platform-browser";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "devextreme-angular/core";
7
- import * as i5 from "devextreme-angular/ui/button";
8
- import * as i6 from "devextreme-angular/ui/tooltip";
5
+ import * as i3 from "devextreme-angular/core";
6
+ import * as i4 from "devextreme-angular/ui/button";
7
+ import * as i5 from "devextreme-angular/ui/tooltip";
9
8
  export class UserInfoTemplateComponent {
10
9
  constructor(service, domSanitizer) {
11
10
  this.service = service;
12
11
  this.domSanitizer = domSanitizer;
13
- this.users = [];
14
12
  }
15
13
  ngOnInit() {
16
- const userInfo = this.cellInfo.column.userInfo;
17
- const value = this.cellInfo.data[userInfo.field];
18
- if (value) {
19
- if (Array.isArray(value)) {
20
- for (const v of value) {
21
- this.service.getUserInfo(v).subscribe(response => {
22
- this.users.push(response);
23
- // 重绘表格宽高
24
- setTimeout(() => {
25
- this.table.resize();
26
- });
27
- });
28
- }
29
- }
30
- else {
31
- this.service.getUserInfo(value).subscribe(response => {
32
- this.users.push(response);
33
- // 重绘表格宽高
34
- setTimeout(() => {
35
- this.table.resize();
36
- });
37
- });
38
- }
39
- }
40
- }
41
- convertContent(userInfo) {
42
- let content = '<table>';
43
- for (const item of userInfo) {
44
- content += `
14
+ this.service.getUserInfo(this.uid).subscribe(response => {
15
+ this.displayName = response.displayName;
16
+ const userInfo = response.userInfo;
17
+ let content = '<table>';
18
+ for (const item of userInfo) {
19
+ content += `
45
20
  <tr>
46
21
  <td style="text-align: right;">${item.caption}:</td>
47
22
  <td style="text-align: left;">${item.value}</td>
48
23
  </tr>
49
24
  `;
50
- }
51
- content += '</table>';
52
- return this.domSanitizer.bypassSecurityTrustHtml(content);
25
+ }
26
+ content += '</table>';
27
+ this.content = this.domSanitizer.bypassSecurityTrustHtml(content);
28
+ // 重绘表格宽高
29
+ setTimeout(() => {
30
+ this.table.resize();
31
+ });
32
+ });
53
33
  }
54
34
  }
55
35
  UserInfoTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, deps: [{ token: i1.DataGridService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
56
- UserInfoTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: { table: "table", cellInfo: "cellInfo" }, ngImport: i0, template: "<ng-container *ngFor=\"let user of users\">\n <dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{user.displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'mouseenter'\"\n [hideEvent]=\"'mouseleave'\">\n <div *dxTemplate=\"let data of 'content'\" [innerHTML]=\"convertContent(user.userInfo)\">\n </div>\n </dx-tooltip>\n </dx-button>\n <br/>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
36
+ UserInfoTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: { table: "table", uid: "uid" }, ngImport: i0, template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
57
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, decorators: [{
58
38
  type: Component,
59
- args: [{ selector: 'rs-user-info-template', template: "<ng-container *ngFor=\"let user of users\">\n <dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{user.displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'mouseenter'\"\n [hideEvent]=\"'mouseleave'\">\n <div *dxTemplate=\"let data of 'content'\" [innerHTML]=\"convertContent(user.userInfo)\">\n </div>\n </dx-tooltip>\n </dx-button>\n <br/>\n</ng-container>\n" }]
39
+ args: [{ selector: 'rs-user-info-template', template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n" }]
60
40
  }], ctorParameters: function () { return [{ type: i1.DataGridService }, { type: i2.DomSanitizer }]; }, propDecorators: { table: [{
61
41
  type: Input
62
- }], cellInfo: [{
42
+ }], uid: [{
63
43
  type: Input
64
44
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC91c2VyLWluZm8tdGVtcGxhdGUvdXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC91c2VyLWluZm8tdGVtcGxhdGUvdXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN2RCxNQUFNLE9BQU8seUJBQXlCO0lBT3BDLFlBQW9CLE9BQXdCLEVBQVUsWUFBMEI7UUFBNUQsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUZoRixVQUFLLEdBQVUsRUFBRSxDQUFDO0lBR2xCLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzFCLFNBQVM7d0JBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUN0QixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzFCLFNBQVM7b0JBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWE7UUFDMUIsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFO1lBQzNCLE9BQU8sSUFBSTs7aURBRWdDLElBQUksQ0FBQyxPQUFPO2dEQUNiLElBQUksQ0FBQyxLQUFLOztPQUVuRCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksVUFBVSxDQUFBO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDOztzSEFoRFUseUJBQXlCOzBHQUF6Qix5QkFBeUIsK0dDVHRDLCtlQWFBOzJGREphLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7aUlBTWpDLEtBQUs7c0JBREosS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFHcmlkU2VydmljZX0gZnJvbSBcIi4uL2RhdGEtZ3JpZC5zZXJ2aWNlXCI7XG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtdXNlci1pbmZvLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItaW5mby10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItaW5mby10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICB0YWJsZTogYW55O1xuICBASW5wdXQoKVxuICBjZWxsSW5mbzogYW55O1xuICB1c2VyczogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IERhdGFHcmlkU2VydmljZSwgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNlbGxJbmZvLmNvbHVtbi51c2VySW5mbztcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2VsbEluZm8uZGF0YVt1c2VySW5mby5maWVsZF07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldFVzZXJJbmZvKHYpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzLnB1c2gocmVzcG9uc2UpO1xuICAgICAgICAgICAgLy8g6YeN57uY6KGo5qC85a696auYXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50YWJsZS5yZXNpemUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0VXNlckluZm8odmFsdWUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy51c2Vycy5wdXNoKHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyDph43nu5jooajmoLzlrr3pq5hcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFibGUucmVzaXplKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRDb250ZW50KHVzZXJJbmZvOiBhbnkpIHtcbiAgICBsZXQgY29udGVudCA9ICc8dGFibGU+JztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdXNlckluZm8pIHtcbiAgICAgIGNvbnRlbnQgKz0gYFxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O1wiPiR7aXRlbS5jYXB0aW9ufe+8mjwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIj4ke2l0ZW0udmFsdWV9PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICBgO1xuICAgIH1cbiAgICBjb250ZW50ICs9ICc8L3RhYmxlPidcbiAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNcIj5cbiAgPGR4LWJ1dHRvbiAjdGV4dERpdiB0eXBlPVwiZGVmYXVsdFwiIHN0eWxpbmdNb2RlPVwidGV4dFwiPlxuICAgIHt7dXNlci5kaXNwbGF5TmFtZX19XG4gICAgPGR4LXRvb2x0aXAgW3RhcmdldF09XCJ0ZXh0RGl2Lmluc3RhbmNlLmVsZW1lbnQoKVwiXG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcbiAgICAgICAgICAgICAgICBbc2hvd0V2ZW50XT1cIidtb3VzZWVudGVyJ1wiXG4gICAgICAgICAgICAgICAgW2hpZGVFdmVudF09XCInbW91c2VsZWF2ZSdcIj5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIiBbaW5uZXJIVE1MXT1cImNvbnZlcnRDb250ZW50KHVzZXIudXNlckluZm8pXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2R4LXRvb2x0aXA+XG4gIDwvZHgtYnV0dG9uPlxuICA8YnIvPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC91c2VyLWluZm8tdGVtcGxhdGUvdXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC91c2VyLWluZm8tdGVtcGxhdGUvdXNlci1pbmZvLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBU3ZELE1BQU0sT0FBTyx5QkFBeUI7SUFRcEMsWUFBb0IsT0FBd0IsRUFBVSxZQUEwQjtRQUE1RCxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDeEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7WUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSTs7aURBRThCLElBQUksQ0FBQyxPQUFPO2dEQUNiLElBQUksQ0FBQyxLQUFLOztPQUVuRCxDQUFDO2FBQ0Q7WUFDRCxPQUFPLElBQUksVUFBVSxDQUFBO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRSxTQUFTO1lBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEEvQlUseUJBQXlCOzBHQUF6Qix5QkFBeUIscUdDVHRDLGtXQVdBOzJGREZhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7aUlBTWpDLEtBQUs7c0JBREosS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFHcmlkU2VydmljZX0gZnJvbSBcIi4uL2RhdGEtZ3JpZC5zZXJ2aWNlXCI7XG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtdXNlci1pbmZvLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItaW5mby10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItaW5mby10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICB0YWJsZTogYW55O1xuICBASW5wdXQoKVxuICB1aWQ6IGFueTtcbiAgZGlzcGxheU5hbWU6IGFueTtcbiAgY29udGVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLCBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0VXNlckluZm8odGhpcy51aWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLmRpc3BsYXlOYW1lID0gcmVzcG9uc2UuZGlzcGxheU5hbWU7XG4gICAgICBjb25zdCB1c2VySW5mbyA9IHJlc3BvbnNlLnVzZXJJbmZvO1xuICAgICAgbGV0IGNvbnRlbnQgPSAnPHRhYmxlPic7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdXNlckluZm8pIHtcbiAgICAgICAgY29udGVudCArPSBgXG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7XCI+JHtpdGVtLmNhcHRpb25977yaPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiPiR7aXRlbS52YWx1ZX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgIGA7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9ICc8L3RhYmxlPidcbiAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGNvbnRlbnQpO1xuICAgICAgLy8g6YeN57uY6KGo5qC85a696auYXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZS5yZXNpemUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZHgtYnV0dG9uICN0ZXh0RGl2IHR5cGU9XCJkZWZhdWx0XCIgc3R5bGluZ01vZGU9XCJ0ZXh0XCI+XG4gIHt7ZGlzcGxheU5hbWV9fVxuICA8ZHgtdG9vbHRpcCBbdGFyZ2V0XT1cInRleHREaXYuaW5zdGFuY2UuZWxlbWVudCgpXCJcbiAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcbiAgICAgICAgICAgICAgW3Nob3dFdmVudF09XCInY2xpY2snXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImNvbnRlbnRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9keC10b29sdGlwPlxuPC9keC1idXR0b24+XG48YnIvPlxuIl19
@@ -24,4 +24,6 @@ export * from './modal/modal.component';
24
24
  export * from './modal/modal.module';
25
25
  export * from './modal/modal.service';
26
26
  export * from './notify/notify';
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ib3gtY29udGFpbmVyL2JveC1pdGVtL2l0ZW0tY29uZmlnL2l0ZW0tY29uZmlnLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2JveC1jb250YWluZXIvYm94LWl0ZW0vaXRlbS1zdHlsZS9pdGVtLXN0eWxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2JveC1jb250YWluZXIvYm94LWNvbnRhaW5lci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ib3gtY29udGFpbmVyL2JveC1jb250YWluZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vYm94LWNvbnRhaW5lci9QbHVnaW5NYW5hZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWdyaWQvZGF0YS1ncmlkLmZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWdyaWQvaW5zdGFuY2UtbGluay10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWdyaWQvbWFzdGVyLWRldGFpbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWdyaWQvcm93LWJ1dHRvbnMtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWdyaWQvZGF0YS1ncmlkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3ZXIvZHJhd2VyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RyYXdlci9kcmF3ZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2VyL2RyYXdlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1wYXJhbXMvZHluYW1pYy1wYXJhbXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1wYXJhbXMvZHluYW1pYy1wYXJhbXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vZm9ybS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2Zvcm0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ljb24tc2VsZWN0b3IvaWNvbi1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29uLXNlbGVjdG9yL2ljb24tc2VsZWN0b3IubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwvbW9kYWwubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwvbW9kYWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmeS9ub3RpZnknO1xuIl19
27
+ export * from './websocket/websocket.module';
28
+ export * from './websocket/websocket.service';
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm94LWNvbnRhaW5lci9ib3gtaXRlbS9pdGVtLWNvbmZpZy9pdGVtLWNvbmZpZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ib3gtY29udGFpbmVyL2JveC1pdGVtL2l0ZW0tc3R5bGUvaXRlbS1zdHlsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ib3gtY29udGFpbmVyL2JveC1jb250YWluZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYm94LWNvbnRhaW5lci9ib3gtY29udGFpbmVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2JveC1jb250YWluZXIvUGx1Z2luTWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL2luc3RhbmNlLWxpbmstdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL21hc3Rlci1kZXRhaWwtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL3Jvdy1idXR0b25zLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtZ3JpZC9kYXRhLWdyaWQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2VyL2RyYXdlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3ZXIvZHJhd2VyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYXdlci9kcmF3ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtcGFyYW1zL2R5bmFtaWMtcGFyYW1zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtcGFyYW1zL2R5bmFtaWMtcGFyYW1zLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2Zvcm0ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS9mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29uLXNlbGVjdG9yL2ljb24tc2VsZWN0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGFsL21vZGFsLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RpZnkvbm90aWZ5JztcbmV4cG9ydCAqIGZyb20gJy4vd2Vic29ja2V0L3dlYnNvY2tldC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWJzb2NrZXQvd2Vic29ja2V0LnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ export class WebsocketModule {
5
+ }
6
+ WebsocketModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ WebsocketModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: WebsocketModule, imports: [CommonModule] });
8
+ WebsocketModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketModule, imports: [CommonModule] });
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ declarations: [],
13
+ imports: [
14
+ CommonModule
15
+ ]
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL3dlYnNvY2tldC93ZWJzb2NrZXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQVE3QyxNQUFNLE9BQU8sZUFBZTs7NEdBQWYsZUFBZTs2R0FBZixlQUFlLFlBSHhCLFlBQVk7NkdBR0gsZUFBZSxZQUh4QixZQUFZOzJGQUdILGVBQWU7a0JBTjNCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldE1vZHVsZSB7XG59XG4iXX0=
@@ -0,0 +1,153 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { interval, Subject } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ export class WebsocketService {
5
+ constructor() {
6
+ this.connectSuccess = false; // websocket 连接成功
7
+ this.period = 60 * 1000 * 10; // 10分钟检查一次
8
+ this.reconnectFlag = false; // 重连
9
+ this.reconnectPeriod = 5 * 1000; // 重连失败,则5秒钟重连一次
10
+ this.serverMessageSubject = new Subject(); // subject对象,用于发送服务器消息
11
+ // 实例化时开始连接服务器
12
+ this.connect();
13
+ // 进入程序就进行心跳检测,避免出现开始就连接中断,后续不重连
14
+ this.heartCheckStart();
15
+ // 将messageSubject存储到window对象上
16
+ window.serverMessageSubject = this.serverMessageSubject;
17
+ }
18
+ /**
19
+ * 创建新连接
20
+ */
21
+ connect() {
22
+ this.url = 'ws://' + window.location.host + '/ws?token=' + localStorage.getItem('token');
23
+ // 创建websocket对象
24
+ this.createWebSocket();
25
+ }
26
+ /**
27
+ * 创建连接
28
+ */
29
+ createWebSocket() {
30
+ // 如果没有建立过连接,才建立连接并且添加时间监听
31
+ this.webSocket = new WebSocket(this.url);
32
+ // 建立连接成功
33
+ this.webSocket.onopen = () => this.onOpen();
34
+ // 接收到消息
35
+ this.webSocket.onmessage = (e) => this.onMessage(e);
36
+ // 连接关闭
37
+ this.webSocket.onclose = (e) => this.onClose(e);
38
+ // 异常
39
+ this.webSocket.onerror = (e) => this.onError(e);
40
+ }
41
+ /**
42
+ * 连接打开
43
+ */
44
+ onOpen() {
45
+ console.log('websocket 已连接');
46
+ // 设置连接成功
47
+ this.connectSuccess = true;
48
+ // 如果是重连中
49
+ if (this.reconnectFlag) {
50
+ // 1.停止重连
51
+ this.stopReconnect();
52
+ // 2.重新开启心跳
53
+ this.heartCheckStart();
54
+ }
55
+ }
56
+ /**
57
+ * 接受到消息
58
+ */
59
+ onMessage(event) {
60
+ // 将接受到的消息发布出去
61
+ const message = JSON.parse(event.data);
62
+ if (message.type === 'websocket') {
63
+ sessionStorage.setItem('clientId', message.value);
64
+ }
65
+ else {
66
+ this.serverMessageSubject.next(message);
67
+ }
68
+ }
69
+ /**
70
+ * 连接关闭
71
+ */
72
+ onClose(e) {
73
+ console.log('websocket 连接关闭', e);
74
+ this.connectSuccess = false;
75
+ this.webSocket.close();
76
+ // 关闭时开始重连
77
+ this.reconnect();
78
+ }
79
+ /**
80
+ * 连接异常
81
+ */
82
+ onError(e) {
83
+ // 出现异常时一定会进onClose,所以只在onClose做一次重连动作
84
+ console.log('websocket 连接异常', e);
85
+ this.connectSuccess = false;
86
+ }
87
+ /**
88
+ * 开始重新连接
89
+ */
90
+ reconnect() {
91
+ // 如果已重连,则直接return,避免重复连接
92
+ if (this.connectSuccess) {
93
+ this.stopReconnect();
94
+ return;
95
+ }
96
+ // 如果正在连接中,则直接return,避免产生多个轮训事件
97
+ if (this.reconnectFlag) {
98
+ console.log('正在重连...');
99
+ return;
100
+ }
101
+ // 开始重连
102
+ this.reconnectFlag = true;
103
+ // 如果没能成功连接,则定时重连
104
+ this.reconnectSubscription = interval(this.reconnectPeriod).subscribe(async (val) => {
105
+ console.log(`重连:${val + 1}次`);
106
+ // 重新连接
107
+ this.connect();
108
+ });
109
+ }
110
+ /**
111
+ * 停止重连
112
+ */
113
+ stopReconnect() {
114
+ // 连接标识置为false
115
+ this.reconnectFlag = false;
116
+ // 取消订阅
117
+ if (typeof this.reconnectSubscription !== 'undefined' && this.reconnectSubscription != null) {
118
+ this.reconnectSubscription.unsubscribe();
119
+ }
120
+ }
121
+ /**
122
+ * 开始心跳检测
123
+ */
124
+ heartCheckStart() {
125
+ this.serverTimeoutSubscription = interval(this.period).subscribe(() => {
126
+ console.log('心跳检查');
127
+ // 保持连接状态,重置下
128
+ if (this.webSocket != null && this.webSocket.readyState === 1) {
129
+ }
130
+ else {
131
+ // 停止心跳
132
+ this.heartCheckStop();
133
+ // 开始重连
134
+ this.reconnect();
135
+ }
136
+ });
137
+ }
138
+ /**
139
+ * 停止心跳检测
140
+ */
141
+ heartCheckStop() {
142
+ // 取消订阅停止心跳
143
+ if (typeof this.serverTimeoutSubscription !== 'undefined' && this.serverTimeoutSubscription != null) {
144
+ this.serverTimeoutSubscription.unsubscribe();
145
+ }
146
+ }
147
+ }
148
+ WebsocketService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
149
+ WebsocketService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketService });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WebsocketService, decorators: [{
151
+ type: Injectable
152
+ }], ctorParameters: function () { return []; } });
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnMtYW50L3NyYy93ZWJzb2NrZXQvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQzs7QUFHckQsTUFBTSxPQUFPLGdCQUFnQjtJQVczQjtRQVJRLG1CQUFjLEdBQUcsS0FBSyxDQUFDLENBQWlCLGlCQUFpQjtRQUN6RCxXQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBZ0IsV0FBVztRQUVuRCxrQkFBYSxHQUFHLEtBQUssQ0FBQyxDQUFrQixLQUFLO1FBQzdDLG9CQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFjLGdCQUFnQjtRQUUxRCx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDLENBQUEsc0JBQXNCO1FBR3JFLGNBQWM7UUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLDhCQUE4QjtRQUM3QixNQUFjLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLE9BQU87UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsMEJBQTBCO1FBQzFC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b3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aW50ZXJ2YWwsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xuICBwcml2YXRlIHVybDogYW55OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k6K+35rGC55qEdXJsXG4gIHByaXZhdGUgd2ViU29ja2V0ITogV2ViU29ja2V0OyAgICAgICAgICAgICAgICAgICAvLyB3ZWJzb2NrZXTlr7nosaFcbiAgcHJpdmF0ZSBjb25uZWN0U3VjY2VzcyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgLy8gd2Vic29ja2V0IOi/nuaOpeaIkOWKn1xuICBwcml2YXRlIHBlcmlvZCA9IDYwICogMTAwMCAqIDEwOyAgICAgICAgICAgICAgICAvLyAxMOWIhumSn+ajgOafpeS4gOasoVxuICBwcml2YXRlIHNlcnZlclRpbWVvdXRTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247ICAgICAgICAvLyDlrprml7bmo4DmtYvov57mjqXlr7nosaFcbiAgcHJpdmF0ZSByZWNvbm5lY3RGbGFnID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8g6YeN6L+eXG4gIHByaXZhdGUgcmVjb25uZWN0UGVyaW9kID0gNSAqIDEwMDA7ICAgICAgICAgICAgICAvLyDph43ov57lpLHotKUs5YiZNeenkumSn+mHjei/nuS4gOasoVxuICBwcml2YXRlIHJlY29ubmVjdFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgICAgICAgICAgICAvLyDph43ov57orqLpmIXlr7nosaFcbiAgcHVibGljIHNlcnZlck1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpOy8vIHN1YmplY3Tlr7nosaEs55So5LqO5Y+R6YCB5pyN5Yqh5Zmo5raI5oGvXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8g5a6e5L6L5YyW5pe25byA5aeL6L+e5o6l5pyN5Yqh5ZmoXG4gICAgdGhpcy5jb25uZWN0KCk7XG4gICAgLy8g6L+b5YWl56iL5bqP5bCx6L+b6KGM5b+D6Lez5qOA5rWLLOmBv+WFjeWHuueOsOW8gOWni+Wwsei/nuaOpeS4reaWrSzlkI7nu63kuI3ph43ov55cbiAgICB0aGlzLmhlYXJ0Q2hlY2tTdGFydCgpO1xuICAgIC8vIOWwhm1lc3NhZ2VTdWJqZWN05a2Y5YKo5Yiwd2luZG935a+56LGh5LiKXG4gICAgKHdpbmRvdyBhcyBhbnkpLnNlcnZlck1lc3NhZ2VTdWJqZWN0ID0gdGhpcy5zZXJ2ZXJNZXNzYWdlU3ViamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDliJvlu7rmlrDov57mjqVcbiAgICovXG4gIHByaXZhdGUgY29ubmVjdCgpIHtcbiAgICB0aGlzLnVybCA9ICd3czovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvd3M/dG9rZW49JyArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIC8vIOWIm+W7undlYnNvY2tldOWvueixoVxuICAgIHRoaXMuY3JlYXRlV2ViU29ja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICog5Yib5bu66L+e5o6lXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVdlYlNvY2tldCgpIHtcbiAgICAvLyDlpoLmnpzmsqHmnInlu7rnq4vov4fov57mjqXvvIzmiY3lu7rnq4vov57mjqXlubbkuJTmt7vliqDml7bpl7Tnm5HlkKxcbiAgICB0aGlzLndlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQodGhpcy51cmwpO1xuICAgIC8vIOW7uueri+i/nuaOpeaIkOWKn1xuICAgIHRoaXMud2ViU29ja2V0Lm9ub3BlbiA9ICgpID0+IHRoaXMub25PcGVuKCk7XG4gICAgLy8g5o6l5pS25Yiw5raI5oGvXG4gICAgdGhpcy53ZWJTb2NrZXQub25tZXNzYWdlID0gKGUpID0+IHRoaXMub25NZXNzYWdlKGUpO1xuICAgIC8vIOi/nuaOpeWFs+mXrVxuICAgIHRoaXMud2ViU29ja2V0Lm9uY2xvc2UgPSAoZSkgPT4gdGhpcy5vbkNsb3NlKGUpO1xuICAgIC8vIOW8guW4uFxuICAgIHRoaXMud2ViU29ja2V0Lm9uZXJyb3IgPSAoZSkgPT4gdGhpcy5vbkVycm9yKGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOi/nuaOpeaJk+W8gFxuICAgKi9cbiAgcHJpdmF0ZSBvbk9wZW4oKSB7XG4gICAgY29uc29sZS5sb2coJ3dlYnNvY2tldCDlt7Lov57mjqUnKTtcbiAgICAvLyDorr7nva7ov57mjqXmiJDlip9cbiAgICB0aGlzLmNvbm5lY3RTdWNjZXNzID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmmK/ph43ov57kuK1cbiAgICBpZiAodGhpcy5yZWNvbm5lY3RGbGFnKSB7XG4gICAgICAvLyAxLuWBnOatoumHjei/nlxuICAgICAgdGhpcy5zdG9wUmVjb25uZWN0KCk7XG4gICAgICAvLyAyLumHjeaWsOW8gOWQr+W/g+i3s1xuICAgICAgdGhpcy5oZWFydENoZWNrU3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5o6l5Y+X5Yiw5raI5oGvXG4gICAqL1xuICBwcml2YXRlIG9uTWVzc2FnZShldmVudDogYW55KSB7XG4gICAgLy8g5bCG5o6l5Y+X5Yiw55qE5raI5oGv5Y+R5biD5Ye65Y67XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaWVudElkJywgbWVzc2FnZS52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VydmVyTWVzc2FnZVN1YmplY3QubmV4dChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6L+e5o6l5YWz6ZetXG4gICAqL1xuICBwcml2YXRlIG9uQ2xvc2UoZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3dlYnNvY2tldCDov57mjqXlhbPpl60nLCBlKTtcbiAgICB0aGlzLmNvbm5lY3RTdWNjZXNzID0gZmFsc2U7XG4gICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAvLyDlhbPpl63ml7blvIDlp4vph43ov55cbiAgICB0aGlzLnJlY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOi/nuaOpeW8guW4uFxuICAgKi9cbiAgcHJpdmF0ZSBvbkVycm9yKGU6IGFueSkge1xuICAgIC8vIOWHuueOsOW8guW4uOaXtuS4gOWumuS8mui/m29uQ2xvc2Us5omA5Lul5Y+q5Zyob25DbG9zZeWBmuS4gOasoemHjei/nuWKqOS9nFxuICAgIGNvbnNvbGUubG9nKCd3ZWJzb2NrZXQg6L+e5o6l5byC5bi4JywgZSk7XG4gICAgdGhpcy5jb25uZWN0U3VjY2VzcyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOW8gOWni+mHjeaWsOi/nuaOpVxuICAgKi9cbiAgcHJpdmF0ZSByZWNvbm5lY3QoKSB7XG4gICAgLy8g5aaC5p6c5bey6YeN6L+eLOWImeebtOaOpXJldHVybizpgb/lhY3ph43lpI3ov57mjqVcbiAgICBpZiAodGhpcy5jb25uZWN0U3VjY2Vzcykge1xuICAgICAgdGhpcy5zdG9wUmVjb25uZWN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWmguaenOato+WcqOi/nuaOpeS4rSzliJnnm7TmjqVyZXR1cm4s6YG/5YWN5Lqn55Sf5aSa5Liq6L2u6K6t5LqL5Lu2XG4gICAgaWYgKHRoaXMucmVjb25uZWN0RmxhZykge1xuICAgICAgY29uc29sZS5sb2coJ+ato+WcqOmHjei/ni4uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyDlvIDlp4vph43ov55cbiAgICB0aGlzLnJlY29ubmVjdEZsYWcgPSB0cnVlO1xuICAgIC8vIOWmguaenOayoeiDveaIkOWKn+i/nuaOpSzliJnlrprml7bph43ov55cbiAgICB0aGlzLnJlY29ubmVjdFN1YnNjcmlwdGlvbiA9IGludGVydmFsKHRoaXMucmVjb25uZWN0UGVyaW9kKS5zdWJzY3JpYmUoYXN5bmMgKHZhbCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coYOmHjei/nu+8miR7dmFsICsgMX3mrKFgKTtcbiAgICAgIC8vIOmHjeaWsOi/nuaOpVxuICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5YGc5q2i6YeN6L+eXG4gICAqL1xuICBwcml2YXRlIHN0b3BSZWNvbm5lY3QoKSB7XG4gICAgLy8g6L+e5o6l5qCH6K+G572u5Li6ZmFsc2VcbiAgICB0aGlzLnJlY29ubmVjdEZsYWcgPSBmYWxzZTtcbiAgICAvLyDlj5bmtojorqLpmIVcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb25uZWN0U3Vic2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlY29ubmVjdFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlY29ubmVjdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlvIDlp4vlv4Pot7Pmo4DmtYtcbiAgICovXG4gIHByaXZhdGUgaGVhcnRDaGVja1N0YXJ0KCkge1xuICAgIHRoaXMuc2VydmVyVGltZW91dFN1YnNjcmlwdGlvbiA9IGludGVydmFsKHRoaXMucGVyaW9kKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ+W/g+i3s+ajgOafpScpXG4gICAgICAvLyDkv53mjIHov57mjqXnirbmgIEs6YeN572u5LiLXG4gICAgICBpZiAodGhpcy53ZWJTb2NrZXQgIT0gbnVsbCAmJiB0aGlzLndlYlNvY2tldC5yZWFkeVN0YXRlID09PSAxKSB7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDlgZzmraLlv4Pot7NcbiAgICAgICAgdGhpcy5oZWFydENoZWNrU3RvcCgpO1xuICAgICAgICAvLyDlvIDlp4vph43ov55cbiAgICAgICAgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlgZzmraLlv4Pot7Pmo4DmtYtcbiAgICovXG4gIHByaXZhdGUgaGVhcnRDaGVja1N0b3AoKSB7XG4gICAgLy8g5Y+W5raI6K6i6ZiF5YGc5q2i5b+D6LezXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNlcnZlclRpbWVvdXRTdWJzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2VydmVyVGltZW91dFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLnNlcnZlclRpbWVvdXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==