mulocal-socket
Version:
Local socket emulation for mudb
113 lines (78 loc) • 4.15 kB
Markdown
# 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