From 12d43199d5be7d1f9ed0808c8516de4769efd7f0 Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Mon, 26 Nov 2018 13:08:23 +0100
Subject: [PATCH] add http listener to websocket-server

---
 examples/textarea.mjs         |  2 +-
 provider/websocket/server.mjs | 18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/examples/textarea.mjs b/examples/textarea.mjs
index c16d5234..e8ad0aed 100644
--- a/examples/textarea.mjs
+++ b/examples/textarea.mjs
@@ -2,7 +2,7 @@ import * as Y from '../index.mjs'
 import { WebsocketProvider } from '../provider/websocket.mjs'
 import { TextareaBinding } from '../bindings/textarea.mjs'
 
-const provider = new WebsocketProvider('ws://35.246.255.92:1234')
+const provider = new WebsocketProvider('ws://localhost:1234')
 const ydocument = provider.get('textarea')
 const type = ydocument.define('textarea', Y.Text)
 const textarea = document.querySelector('textarea')
diff --git a/provider/websocket/server.mjs b/provider/websocket/server.mjs
index 148425d8..8f28210f 100644
--- a/provider/websocket/server.mjs
+++ b/provider/websocket/server.mjs
@@ -4,10 +4,17 @@
 
 import * as Y from '../../index.mjs'
 import WebSocket from 'ws'
+import http from 'http'
 
 const port = process.env.PORT || 1234
 
-const wss = new WebSocket.Server({ port })
+const server = http.createServer((req, res) => {
+  res.writeHead(200, { 'Content-Type': 'text/plain' })
+  res.end('okay')
+})
+
+const wss = new WebSocket.Server({ noServer: true })
+
 const docs = new Map()
 
 const messageSync = 0
@@ -107,4 +114,13 @@ const setupConnection = (conn, req) => {
 
 wss.on('connection', setupConnection)
 
+server.on('upgrade', (request, socket, head) => {
+  // You may check auth of request here..
+  wss.handleUpgrade(request, socket, head, ws => {
+    wss.emit('connection', ws, request)
+  })
+})
+
+server.listen(port)
+
 console.log('running on port', port)