ForgeTotal.js 5
sv

Total.js 5

Utbyt meddelanden med Total Messaging Service

Total.js 5 · total5@0.0.19 tmspublishsubscribewebsocketmessaging Körd med Total.js 5

TMS (Total Messaging Service) är en liten meddelandebuss ovanpå en WebSocket. Du slår på den i filen config med $tms : true; slutpunkten är /$tms/ och secret_tms är den token som varje klient måste skicka i headern x-token (en felaktig token stänger anslutningen med kod 4001, och en adress som misslyckas mer än 5 gånger blockeras en stund). När en klient ansluter får den ett meta-meddelande som listar vad appen publicerar, vad den tar emot och vad den kan göra.

Tre saker kan exponeras, var och en beskriven av ett schema i samma name:Type-format som en actions input:

  • NEWPUBLISH(name, schema) deklarerar ett meddelande som appen skickar; PUBLISH(name, value) skickar det till varje klient som bett om det genom att skicka { type: 'subscribers', subscribers: [name] }.
  • NEWSUBSCRIBE(name, schema, callback) deklarerar ett meddelande som appen tar emot: en klient skickar { type: 'subscribe', id: name, data: {...} } och callback(message, client) körs bara när datan är giltig. Den validerade datan finns i message.response (message.error är alltid null där) och client är avsändaren.
  • NEWCALL(name, schema, callback) deklarerar en funktion som klienten anropar: klienten skickar { type: 'call', id: name, data: {...}, callbackid: '1' } och appen svarar med samma meddelande med success: true och resultatet i data, eller med error: true när datan är ogiltig. callback(data, done, client) ger resultatet med done(null, result).

Om du anger null som schema för NEWPUBLISH eller NEWSUBSCRIBE tas deklarationen bort. Total.js officiella klient (TMSCLIENT) talar det här protokollet åt dig från en annan Total.js-app; vilken WebSocket-klient som helst fungerar.

UNSUBSCRIBE(name, [callback]) tar bort lyssnarna för ett meddelande som applikationen tar emot: bara callback när du skickar den, annars alla. Den returnerar true när den tog bort något och false när det inte fanns något att ta bort.

config
$tms : true
secret_tms : my-tms-token
definitions/tms.js
NEWPUBLISH('news', 'title:String');

NEWSUBSCRIBE('orders', 'id:String, qty:Number', function(message, client) {
	MAIN.orders.push(message.response);
});

NEWCALL('sum', 'a:Number, b:Number', function(data, done) {
	done(null, { total: data.a + data.b });
});

MAIN.orders = [];
controllers/tms.js
exports.install = function() {
	ROUTE('POST /news/ @json', news);
	ROUTE('GET /orders/', orders);
	ROUTE('GET /unsubscribe/', unsubscribe);
};

function news($) {
	PUBLISH('news', { title: $.body.title });
	$.success();
}

function orders($) {
	$.json(MAIN.orders);
}

function unsubscribe($) {
	const first = UNSUBSCRIBE('orders');
	const second = UNSUBSCRIBE('orders');
	$.json({ first: first, second: second });
}