Skip to content

Instantly share code, notes, and snippets.

@namelos
Created May 21, 2016 14:13
Show Gist options
  • Save namelos/efd90878815a8287c3b0ce9dae4a28fa to your computer and use it in GitHub Desktop.
Save namelos/efd90878815a8287c3b0ce9dae4a28fa to your computer and use it in GitHub Desktop.
cycle server
const http = require('http')
const Cycle = require('@cycle/core')
const Rx = require('rx')
const makeServerDriver = port => {
const server$ = new Rx.Subject()
return sink$ => {
http.createServer((request, response) => {
server$.onNext({ request, response })
response.writeHead(200, { 'Content-Type': 'text/plain' })
sink$.subscribe(sink => {
response.end(sink)
})
}).listen(port, '127.0.0.1', () => console.log(`listening at ${port}`))
return server$
}
}
const makeConsoleDriver = () =>
msg$ =>
msg$.subscribe(console.log)
const main = ({ console, server }) => ({
console: server.map(({ request }) => `request for ${request.url}`),
server: Rx.Observable.of('hello server')
})
Cycle.run(main, {
console: makeConsoleDriver(),
server: makeServerDriver(3000)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment