0.8.5 • Published 4 years ago

ternion v0.8.5

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

Ternion

Build Status Coverage Status Known Vulnerabilities Packagist DeepScan grade Maintainability Codacy Badge

A plugable socket.io framework that does the job for you

This project is still under development

Sample usage

const ternion = require("ternion");
const sockio = require("socket.io");
const io = sockio(8000);

const IDENTIFIER = "id";
const emitter = ternion.buildTools.constructEmitter();
const defaultBuild = ternion.builds.defaultBuild();

const names = [];
const loggedIn = {};
const nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, "Name exists");
const nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, "Name must be of length 3 atleast");
const hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, "No Name provided");
const loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], "Not logged in");
const hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, "No message provided");
const msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, "Message must be of length 3 at least");
const nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };
const loginHandler = (data, response, id) => {
  loggedIn[id] = data.name;
  names.push(data.name);
  response.respond("loginsuccess");
};
const msgHandler = (data, response, id) => {
  response.broadcast("message", { name: data.name, msg: data.msg });
  response.respond("message", { name: data.name, msg: data.msg });
};
const welcomeMsg = (data, response, id) => {
  response.respond("misc", { name: data.name, msg: "Welcome" });
};
const disconnect = (data, response, id) => {
  delete loggedIn[id];
  names.splice(names.indexOf(data.name), 1);
};

const buildSpec =
{
  events:
    {
      newclient:
        {
          handlers: [welcomeMsg]
        },
      disconnect:
        {
          middlewares: [nameFillMiddleware],
          handlers: [disconnect]
        },
      login:
        {
          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],
          handlers: [loginHandler]
        },
      message:
        {
          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],
          middlewares: [nameFillMiddleware],
          handlers: [msgHandler]
        }
    }
};
const newBuild = ternion.buildTools.constructBuild(
  {
    buildSpec,
    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: "unknown", ignoreUnregisteredEvents: false }
  });

const build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });
const handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });
const sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });

sock.start();
handler.start();
const io = require("socket.io-client");

const client = io("http://localhost:8000/");
client.on("connect", function() {
  console.log("connected");
  client.emit("message", { msgType: "login", msgData: { name: "testname" } });
});
client.on("message", function(data) {
  const mdata = data.msgData;
  switch (data.msgType) {
    case "validationErrors": console.log(mdata); break;
    case "loginsuccess": { console.log("logged in"); client.emit("message", { msgType: "message", msgData: { msg: "some random msg" } }); break; }
    case "misc": console.log(mdata.msg); break;
    case "message": console.log("message from " + mdata.name + " : " + mdata.msg); break;
    case "unhandledError": console.log("unhandled: " + mdata); break;
    case "unrecongnizedMessage": console.log("unrecongnized: " + mdata); break;
  }
});
client.on("disconnect", function() { console.log("server closed connection"); });
0.8.5

4 years ago

0.8.4

4 years ago

0.8.3

4 years ago

0.8.2

4 years ago

0.8.1

4 years ago

0.7.6

4 years ago

0.7.5

4 years ago

0.7.4

7 years ago

0.7.3

7 years ago

0.7.2

7 years ago

0.7.1

7 years ago

0.6.10

7 years ago

0.6.9

7 years ago

0.6.8

7 years ago

0.6.7

7 years ago

0.6.6

7 years ago

0.6.5

7 years ago

0.6.4

7 years ago

0.6.3

7 years ago

0.6.2

7 years ago

0.6.1

7 years ago

0.5.1

7 years ago

0.4.2

7 years ago

0.4.1

7 years ago

0.3.5

7 years ago

0.3.4

7 years ago

0.3.3

7 years ago

0.3.2

7 years ago

0.3.1

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago