UNPKG

mulocal-socket

Version:
113 lines (78 loc) 4.15 kB
# mulocal-socket Network socket emulation for `mudb`. In `mulocal-socket`, no real network connections are established so no Web servers are needed, meaning any `mudb` applications using `mulocal-socket` can run entirely in a browser. This can be favorable to development in that * you can forget about restarting the server on changes * you can debug using the dev tools provided by browsers # example ```javascript var mudb = require('mudb') var muLocalSocket = require('mulocal-socket') var socketServer = muLocalSocket.createLocalSocketServer() var muServer = new mudb.MuServer(socketServer) muServer.start({ /* event handlers */ }) var socket = muLocalSocket.createLocalSocket() var muClient = new mudb.MuClient(socket) mClient.start({ /* event handlers */ }) ``` # table of contents # install # ``` npm i mulocal-socket ``` # api # ## interfaces ## Purely instructive types used to describe the API: * `SessionId`: `string` * `Data`: `Uint8Array | string` * `SocketState`: an enum consisting of three members * `SocketState.INIT` * `SocketState.OPEN` * `SocketState.CLOSED` * `SocketServerState`: an enum consisting of three members * `SocketServerState.INIT` * `SocketServerState.RUNNING` * `SocketServerState.SHUTDOWN` ## `createLocalSocketServer()` ## A factory returning a new instance of `MuLocalSocketServer`. ## `createLocalSocket(spec)` ## Spawns and associates two new instances of `MuLocalSocket`, then returns the client-side socket to be used to create a `MuClient`. * `spec:object` * `sessionId:SessionId`: a unique session id used to identify a client * `server:MuLocalSocketServer`: the socket server Mostly you should only use the factory methods instead of the constructors. ## `MuLocalSocketServer` ## A `MuLocalSocketServer` is a pseudo socket server that can be used to create a `MuServer`. It does not create any server-side sockets and is only responsible for accumulating and closing sockets. ### `state:SocketServerState` ### A tri-valued field determining the availability of the socket server. It is initialized to `SocketServerState.INIT`. ### `clients:MuLocalSocket[]` ### Server-side sockets, one per client through which the server communicates with the client. ### `start(spec)` ### Hooks handlers and accumulates sockets. `state` is set to `SocketServerState.RUNNING`. * `spec:object` * `ready()` called when the socket server is ready * `connection(socket:MuLocalSocket)` called when a new server-side socket is added * `close(error?)` called when the socket server is shut down ### `close()` ### Closes all sockets. `state` is set to `SocketServerState.SHUTDOWN`. ## `MuLocalSocket(sessionId, server)` ## A `MuLocalSocket` can either be a client-side or server-side socket and every two `MuLocalSocket`s should be associated to form an exclusive pair. A `MuLocalSocket` can be used to create a `MuClient` when it is used as a client-side socket. * `sessionId:SessionId`: a unique session id used to identify a client * `server:MuLocalSocketServer`: the socket server ### `sessionId:SessionId` ### The unique session id identifying the client. ### `state:SocketState` ### A tri-valued field determining the availability of the socket. It is initialized to `SocketState.INIT`. ### `open(spec)` ### Hooks handlers and drains pending messages. `state` is set to `SocketState.OPEN`. * `spec:object` * `ready()` called when the socket is ready to receive data * `message(data:Data, unreliable:boolean)` called when receiving data * `close(error?)` called when the socket is closed ### `send(data, unreliable?)` ### Sends data to the associated socket, which will be delivered either in order or out of order, depending on the value of `unreliable`. * `data:Data` data to be sent, can either be a JSON string or a `Uint8Array` * `unreliable?:boolean` optional, the data will be delivered out of order if set to `true` ### `close()` ### Closes the socket and the socket on the other end. `state` is set to `SocketState.CLOSED`. # credits Copyright (c) 2017 Mikola Lysenko, Shenzhen Dianmao Technology Company Limited