1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import emitter from '@ohos.events.emitter'; 17import { EmitterConst } from '../../common/EmitterConst'; 18import Base from '@ohos.base'; 19 20class GoodsListInner { 21 id: number = 0 22} 23 24class GoodsList { 25 data: GoodsListInner = { 26 id: 0 27 } 28} 29 30export class CustomEmitter { 31 shoppingCartGoodsList: GoodsList[] = []; 32 33 // 单次订阅回调 34 public showEventsDialog(callback: Base.Callback<emitter.EventData>) { 35 let dialogShowEventsId: emitter.InnerEvent = { 36 eventId: EmitterConst.DIALOG_EVENT_ID 37 }; 38 let dialogShowEventsData: emitter.EventData = { 39 data: { 40 id: EmitterConst.DIALOG_EVENT_ID, 41 } 42 }; 43 // 单次订阅事件--广告 44 emitter.once(dialogShowEventsId, callback); 45 // 事件发布 46 emitter.emit(dialogShowEventsId, dialogShowEventsData); 47 } 48 49 // 单次订阅回调(eventId为string类型) 50 public closeEventsDialog(callback: Base.Callback<emitter.EventData>) { 51 let dialogCloseEventsData: emitter.EventData = { 52 data: { 53 id: EmitterConst.CLOSE_DIALOG_EVENT_ID 54 } 55 }; 56 // 单次订阅事件--关闭广告 57 emitter.once(EmitterConst.CLOSE_DIALOG_EVENT_ID, callback); 58 // 事件发布 59 emitter.emit(EmitterConst.CLOSE_DIALOG_EVENT_ID, dialogCloseEventsData); 60 } 61 62 // 持久化订阅的事件回调 63 public setShoppingCartGoodsList(callback: (eventData: emitter.EventData) => void) { 64 let addGoodDataId: emitter.InnerEvent = { 65 eventId: EmitterConst.ADD_EVENT_ID 66 }; 67 // 以持久化方式订阅购物车添加事件并接收事件回调 68 emitter.off(EmitterConst.ADD_EVENT_ID); 69 70 emitter.on(addGoodDataId, (eventData: emitter.EventData) => { 71 callback(eventData); 72 }); 73 } 74 75 // 持久化订阅的事件回调(eventId为string类型) 76 public deleteShoppingCartGoodsList(callback: (eventData: emitter.EventData) => void) { 77 // 以持久化方式订阅购物车删除事件并接收事件回调 78 emitter.off(EmitterConst.DELETE_EVENT_ID); 79 emitter.on(EmitterConst.DELETE_EVENT_ID, (eventData: emitter.EventData) => { 80 callback(eventData); 81 }); 82 } 83 84 public addGoods(goodId: number) { 85 let addToShoppingCartId: emitter.InnerEvent = { 86 eventId: EmitterConst.ADD_EVENT_ID 87 }; 88 let shoppingCartData: emitter.EventData = { 89 data: { 90 id: goodId 91 } 92 }; 93 // 持续订阅发布事件 94 emitter.emit(addToShoppingCartId, shoppingCartData); 95 } 96 97 public deleteGoods(listItemId: number) { 98 console.info("setShoppingCartGoodsList goodId" + JSON.stringify(listItemId)) 99 let shoppingCartData: emitter.EventData = { 100 data: { 101 id: listItemId, 102 } 103 }; 104 // 持续订阅发布事件 105 emitter.emit(EmitterConst.DELETE_EVENT_ID, shoppingCartData); 106 } 107 108 // 以持久化方式订阅购物车购买事件 109 public listenerEvents() { 110 emitter.on(EmitterConst.BUY_EVENT_ID, (eventData: emitter.EventData) => { 111 }); 112 } 113 114 // 获取购买事件订阅者数量并将结果返回 115 public getListenerCounts(callback: (counts: number) => void) { 116 callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID)); 117 } 118 119 // 取消订阅购买事件后将购买事件订阅者数量结果返回 120 public clearListenerCounts(callback: (counts: number) => void) { 121 emitter.off(EmitterConst.BUY_EVENT_ID); 122 callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID)); 123 } 124}