Created
February 25, 2016 13:43
-
-
Save onzag/0d0440e445b646a4a5de to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Register the client event for an incoming message sent by another user | |
SELECT eventzServ.registerCli('incomingMessage',E'Provides a new message from another user\n' | |
'message: The message that the other user sent\n' | |
'origin: The ip of origin as a string'); | |
-- Register the client event for an incoming message sent by the server | |
SELECT eventzServ.registerCli('incomingMessageServer',E'Provides a new message from the server\n' | |
'message: The message that the server sent\n'); | |
-- A controller for when a new message is sent to be post | |
CREATE OR REPLACE FUNCTION controllers."postMessage"(sender BYTEA, data JSONB, handle TEXT) RETURNS VOID AS $$ | |
DECLARE query JSONB; | |
BEGIN | |
SELECT eventzServ.getQuery(socket) INTO query; | |
-- send that message to all but the current ip | |
PERFORM eventzServ.sendAllBut((ARRAY[sender])::BYTEA[],'incomingMessage', | |
('{"origin":"' || query->>'nick' || '","message":' || (data -> 'message')::TEXT || '}')::JSONB,handle); | |
END; | |
$$ LANGUAGE plpgsql; | |
-- Register such event | |
SELECT eventzServ.register('postMessage',E'Sends a new message to the chat room\n' | |
'message: A string containing message body'); | |
-- When an user connects | |
CREATE OR REPLACE FUNCTION controllers.__auth(ip INET,query JSONB) RETURNS BOOL AS $$ | |
DECLARE isAllowed BOOL; | |
BEGIN | |
SELECT (query->'nick') IS NOT NULL INTO isAllowed; | |
RETURN isAllowed; | |
END; | |
$$ LANGUAGE plpgsql; | |
-- Register the pseudo-event | |
SELECT eventzServ.register('__connect',NULL); | |
-- When an user connects | |
CREATE OR REPLACE FUNCTION controllers.__connect(socket BYTEA) RETURNS VOID AS $$ | |
DECLARE ip INET; | |
DECLARE query JSONB; | |
BEGIN | |
SELECT eventzServ.getIP(socket) INTO ip; | |
SELECT eventzServ.getQuery(socket) INTO query; | |
-- send a server message to all but the current ip that a new user connected | |
PERFORM eventzServ.sendAllBut((ARRAY[socket])::UUID[],'incomingMessageServer', | |
('{"message":"user ' || query->>'nick' || '@' || ip::TEXT || 'connected"}')::JSONB,NULL); | |
PERFORM eventzServ.send(socket,'incomingMessageServer', | |
('{"message":"Welcome to our little chat room"}')::JSONB,NULL); | |
END; | |
$$ LANGUAGE plpgsql; | |
-- Register the pseudo-event | |
SELECT eventzServ.register('__connect',NULL); | |
-- When an user disconnects | |
CREATE OR REPLACE FUNCTION controllers.__disconnect(socket BYTEA) RETURNS VOID AS $$ | |
DECLARE ip INET; | |
DECLARE query JSONB; | |
BEGIN | |
SELECT eventzServ.getIP(socket) INTO ip; | |
SELECT eventzServ.getQuery(socket) INTO query; | |
-- send a server message to all but the current ip that a new user disconnected | |
PERFORM eventzServ.sendAllBut((ARRAY[socket])::UUID[],'incomingMessageServer', | |
('{"message":"user ' || query->>'nick' || '@' || ip::TEXT || 'disconnected"}')::JSONB,NULL); | |
END; | |
$$ LANGUAGE plpgsql; | |
-- Register the pseudo-event | |
SELECT eventzServ.register('__disconnect',NULL); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment