Просмотр исходного кода

added files for a socket server

Brandon Wong лет назад: 8
Родитель
Сommit
b5a8b52d8a
5 измененных файлов с 144 добавлено и 0 удалено
  1. 3 0
      socket/.babelrc
  2. 6 0
      socket/.gitignore
  3. 27 0
      socket/package.json
  4. 27 0
      socket/src/server.js
  5. 81 0
      socket/test/server.js

+ 3 - 0
socket/.babelrc

@@ -0,0 +1,3 @@
+{
+  "presets": ["es2015"]
+}

+ 6 - 0
socket/.gitignore

@@ -0,0 +1,6 @@
+.idea
+node_modules
+build
+test-build
+npm-debug*
+*.swp

+ 27 - 0
socket/package.json

@@ -0,0 +1,27 @@
+{
+  "name": "$foldername",
+  "version": "0.1.0",
+  "main": "build/server.js",
+  "scripts": {
+    "test": "node test-build/server.js",
+    "postinstall": "npm run compile-src",
+    "compile-test": "babel test --out-dir test-build",
+    "compile-src": "babel src --out-dir build",
+    "compile": "npm run compile-src; npm run compile-test",
+    "compile-start": "npm run compile && node build/server.js 2> /dev/null",
+    "watch": "nodemon --watch src --watch test --exec \"npm run --silent compile 2> /dev/null\"",
+    "testwatch": "nodemon --watch src --watch test --exec \"npm run --silent compile && npm test\"",
+    "serverwatch": "nodemon --watch src --watch test --exec \"npm run compile-start 2> /dev/null\""
+  },
+  "dependencies": {
+    "babel-cli": "^6.6.5",
+    "babel-preset-es2015": "^6.6.0",
+    "socket.io": "^1.4.5",
+  },
+  "devDependencies": {
+    "blue-tape": "^0.2.0",
+    "nodemon": "^1.9.1",
+    "socket.io-client": "^1.4.5"
+  },
+  "private": true,
+}

+ 27 - 0
socket/src/server.js

@@ -0,0 +1,27 @@
+
+import express from 'express';
+import socketio from 'socket.io';
+import http from 'http';
+
+const port = process.env.kport || 8080,
+    app = express(),
+    server = http.createServer(app),
+    ioserv = socketio.listen(server);
+
+server.listen(port, function listening() {
+    console.log('now listening on', port);
+});
+
+
+app.get('/', function inc(req, res) {
+    res.send('working');
+});
+
+
+ioserv.on('connection', function (client) {
+    client.on('test', function testMirror(msg) {
+        client.emit('test', msg);
+    });
+});
+
+

+ 81 - 0
socket/test/server.js

@@ -0,0 +1,81 @@
+
+import child_process from 'child_process';
+import tape from 'blue-tape';
+import http from 'http';
+import socketclient from 'socket.io-client';
+
+
+const serverhost = 'localhost',
+    serverport = 8084,
+    server = child_process.fork('build/server.js');
+
+tape.test('test server', function testServer(t) {
+    let client;
+
+    waitPro()
+    .then(function done(a) {
+        return requestPro(`http://${serverhost}:${serverport}`)
+        .then(function done(a) {
+            t.equal(a, 'yes', 'received message from server');
+        })
+    })
+
+    .catch(function catchall(e) {
+        console.log('error somewhere', e);
+        t.fail('error somewhere');
+    })
+    .then(function done(a) {
+        t.end();
+        server.kill();
+    })
+});
+
+
+
+function waitPro(n = 1000) {
+    return new Promise(function pro(resolve, reject) {
+        setTimeout(resolve, n);
+    });
+}
+function requestPro(reqopts, data) {
+    return new Promise(function prot(resolve, reject) {
+        try {
+            let req = http.request(reqopts, function received(resp) {
+                let str = '';
+                resp.on('data', function p(part) {
+                    str += part;
+                });
+                resp.on('end', function done() {
+                    if( resp.statusCode >= 400 && resp.statusCode <= 599 ) {
+                        reject(str);
+                    }
+                    else {
+                        resolve(str);
+                    }
+                });
+            });
+            req.on('error', function err(ee) {
+                reject(ee);
+            });
+            if( data ) {
+                req.write(data);
+            }
+            req.end();
+        }
+        catch(e) {
+            reject(e);
+        }
+    });
+}
+function responsePro(socket, evt, wait = 3000) {
+    return new Promise(function pro(resolve, reject) {
+        let to = setTimeout(reject.bind(null, 'socket event TIMEOUT ' + evt), wait);
+        socket.once(evt, function (a) {
+            clearTimeout(to);
+            resolve(a);
+        });
+    });
+}
+
+
+