fluence-js/src/subscriptions.ts

43 lines
1.5 KiB
TypeScript
Raw Normal View History

2020-05-14 15:20:39 +03:00
/*
2020-05-14 17:30:17 +03:00
* Copyright 2020 Fluence Labs Limited
2020-05-14 15:20:39 +03:00
*
2020-05-14 17:30:17 +03:00
* 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
2020-05-14 15:20:39 +03:00
*
2020-05-14 17:30:17 +03:00
* http://www.apache.org/licenses/LICENSE-2.0
2020-05-14 15:20:39 +03:00
*
2020-05-14 17:30:17 +03:00
* 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.
2020-05-14 15:20:39 +03:00
*/
import {FunctionCall} from "./functionCall";
2020-05-14 15:20:39 +03:00
import {Address} from "./address";
export class Subscriptions {
private subscriptions: ((args: any, target: Address, replyTo: Address) => (boolean | undefined))[] = [];
constructor() {}
/**
* Subscriptions will be applied to all peer and relay messages.
* If subscription returns true, delete subscription.
* @param f
*/
subscribe(f: (args: any, target: Address, replyTo: Address) => (boolean | undefined)) {
this.subscriptions.push(f);
}
/**
* Apply call to all subscriptions and delete subscriptions that return `true`.
* @param call
*/
applyToSubscriptions(call: FunctionCall) {
// if subscription return false - delete it from subscriptions
this.subscriptions = this.subscriptions.filter(callback => !callback(call.arguments, call.target, call.reply_to))
}
}