Как я могу создать объект, который использует сервис как способ передачи событий? - PullRequest
1 голос
/ 11 апреля 2020

Я пишу библиотеку в Ballerina и ищу способ генерировать события, например, onError WebSocket, onText et c '...

// library code
public type Client object {
    string token;
    http:WebSocketClient? wsConnection = ();
    service eventService;
    public function __init(string clientToken, service clientEventService) {
        self.token = clientToken;
        self.eventService = clientEventService;
        // I can't call any method which is inside the service because I'm not in a type descriptor (?)
    }
};

Вот что Я хочу, чтобы произошло на стороне пользователя:

Client myClient = new("TOKEN", myEventService);

service myEventService = service {
    resource function onTest(string myText) {
        io:println(myText);
    }
};

1 Ответ

0 голосов
/ 12 апреля 2020

Для Ballerina 1.1.x

В Ballerina есть другой способ работы с событиями (более предпочтительный способ), это предопределенная структура данных, называемая stream. Пожалуйста, посмотрите https://ballerina.io/v1-1/learn/by-example/streams.html возможно, это может соответствовать вашему варианту использования.

Насколько я знаю, на данный момент эти стандартные библиотеки listeners (такие как Web-sub и http) обратитесь за помощью к Java interop для помощи в отправке вызовов этим resource функциям. Вы можете начать поиск здесь , чтобы узнать, как это делает http-библиотека Ballerina.

Для Ballerina 1.2.x

Вам потребуется реализовать наблюдателя. Сделай сам образ.

...