Browse Source

first commit

tremble 5 years ago
commit
647aa8d99b
8 changed files with 419 additions and 0 deletions
  1. 22 0
      .gitignore
  2. 61 0
      client/index.html
  3. 63 0
      client/index2.html
  4. 9 0
      client/js/socket.io.js
  5. 4 0
      index.js
  6. 101 0
      package.json
  7. 80 0
      server/app.js
  8. 79 0
      server/index.js

+ 22 - 0
.gitignore

@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*
+*.bak

+ 61 - 0
client/index.html

@@ -0,0 +1,61 @@
+<html>
+
+<head>
+  <meta charset='UTF-8'>
+  <title>socket.io客户端</title>
+  <script src="./js/socket.io.js"></script>
+</head>
+
+<body>
+  <button id='send'>发送消息到服务器</button>
+  <div>
+    <h3>服务器响应的消息:</h3>
+    <i id='msg'></i>
+  </div>
+
+  <script>
+
+    
+    // 'http://47.115.43.159:3000'
+    var socket = io('http://47.115.43.159:3000',{
+      path: '/test',
+      query: {
+        customerId: 'user_001',
+        agentId: 'user_002',
+        role:'customer',
+        nickName: '测试1',
+        myHeadUrl: 'http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg'
+      }
+    });
+
+    socket.on('vr_request', function (data) {
+      console.log(data);
+    });
+
+    socket.on('action', function (data) {
+      console.log('--acticon--',data);
+    });
+
+    socket.on('vr_response', function (data) {
+      let res = data
+      console.log(`${res.customerId}: ${res.content}`);
+    });
+    var send = document.querySelector('#send');
+    send.addEventListener('click', function () {
+      socket.emit('getJson', {
+        customerId:'user_001',
+        agentId: 'user_002',
+        nickName: '测试1',
+        myHeadUrl: 'http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg',
+        content:{
+          json:'t1',
+          json1:'t2',
+          json2:'t3',
+          action:'action'
+        }
+      })
+    })
+  </script>
+</body>
+
+</html>

+ 63 - 0
client/index2.html

@@ -0,0 +1,63 @@
+<html>
+
+<head>
+  <meta charset='UTF-8'>
+  <title>socket.io客户端</title>
+  <script src="./js/socket.io.js"></script>
+</head>
+
+<body>
+  <button id='send'>发送消息到服务器</button>
+  <div>
+    <h3>服务器响应的消息:</h3>
+    <i id='msg'></i>
+  </div>
+
+  <script>
+    // 'http://47.115.43.159:3000'
+    var socket = io('http://47.115.43.159:3000',{
+      path: '/test',
+      query: {
+        customerId: 'user_002',
+        agentId: 'user_001',
+        role:'agent',
+        nickName: '测试2',
+        myHeadUrl: 'http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg'
+      }
+    });
+    socket.on('vr_request', function (data) {
+      console.log(data);
+    });
+
+    socket.on('vr_start', function (data) {
+      console.log(data);
+    });
+
+    socket.on('action', function (data) {
+      console.log('--acticon--',data);
+    });
+    
+
+    socket.on('vr_response', function (data) {
+      let res = data
+      console.log(`${res.customerId}: ${res.content}`);
+    });
+    var send = document.querySelector('#send');
+    send.addEventListener('click', function () {
+      socket.emit('getJson', {
+        agentId: 'user_001',
+        customerId:'user_002',
+        nickName: '测试2',
+        myHeadUrl: 'http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg',
+        content:{
+          json:'t1',
+          json1:'t2',
+          json2:'t3',
+          action:'action1'
+        }
+      })
+    })
+  </script>
+</body>
+
+</html>

File diff suppressed because it is too large
+ 9 - 0
client/js/socket.io.js


+ 4 - 0
index.js

@@ -0,0 +1,4 @@
+
+var WebSocketServer = require("./server/index");
+
+new WebSocketServer().create();

+ 101 - 0
package.json

@@ -0,0 +1,101 @@
+{
+  "name": "server",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "dependencies": {
+    "_accepts@1.3.7@accepts": "^1.3.7",
+    "_any-promise@1.3.0@any-promise": "^1.3.0",
+    "_cache-content-type@1.0.1@cache-content-type": "^1.0.1",
+    "_co@4.6.0@co": "^4.6.0",
+    "_content-disposition@0.5.3@content-disposition": "^0.5.3",
+    "_content-type@1.0.4@content-type": "^1.0.4",
+    "_cookies@0.8.0@cookies": "^0.8.0",
+    "_debug@3.1.0@debug": "^3.1.0",
+    "_deep-equal@1.0.1@deep-equal": "^1.0.1",
+    "_delegates@1.0.0@delegates": "^1.0.0",
+    "_depd@1.1.2@depd": "^1.1.2",
+    "_depd@2.0.0@depd": "^2.0.0",
+    "_destroy@1.0.4@destroy": "^1.0.4",
+    "_ee-first@1.1.1@ee-first": "^1.1.1",
+    "_encodeurl@1.0.2@encodeurl": "^1.0.2",
+    "_error-inject@1.0.0@error-inject": "^1.0.0",
+    "_escape-html@1.0.3@escape-html": "^1.0.3",
+    "_fresh@0.5.2@fresh": "^0.5.2",
+    "_http-assert@1.4.1@http-assert": "^1.4.1",
+    "_http-errors@1.7.3@http-errors": "^1.7.3",
+    "_inherits@2.0.4@inherits": "^2.0.4",
+    "_is-generator-function@1.0.7@is-generator-function": "^1.0.7",
+    "_keygrip@1.1.0@keygrip": "^1.1.0",
+    "_koa-compose@3.2.1@koa-compose": "^3.2.1",
+    "_koa-compose@4.1.0@koa-compose": "^4.1.0",
+    "_koa-convert@1.2.0@koa-convert": "^1.2.0",
+    "_koa@2.11.0@koa": "^2.11.0",
+    "_media-typer@0.3.0@media-typer": "^0.3.0",
+    "_mime-db@1.43.0@mime-db": "^1.43.0",
+    "_mime-types@2.1.26@mime-types": "^2.1.26",
+    "_ms@2.0.0@ms": "^2.0.0",
+    "_negotiator@0.6.2@negotiator": "^0.6.2",
+    "_nodejs-websocket@1.7.2@nodejs-websocket": "^1.7.2",
+    "_on-finished@2.3.0@on-finished": "^2.3.0",
+    "_only@0.0.2@only": "^0.0.2",
+    "_parseurl@1.3.3@parseurl": "^1.3.3",
+    "_safe-buffer@5.1.2@safe-buffer": "^5.1.2",
+    "_setprototypeof@1.1.1@setprototypeof": "^1.1.1",
+    "_statuses@1.5.0@statuses": "^1.5.0",
+    "_toidentifier@1.0.0@toidentifier": "^1.0.0",
+    "_tsscmp@1.0.6@tsscmp": "^1.0.6",
+    "_type-is@1.6.18@type-is": "^1.6.18",
+    "_vary@1.1.2@vary": "^1.1.2",
+    "_ylru@1.2.1@ylru": "^1.2.1",
+    "accepts": "^1.3.7",
+    "any-promise": "^1.3.0",
+    "cache-content-type": "^1.0.1",
+    "co": "^4.6.0",
+    "content-disposition": "^0.5.3",
+    "content-type": "^1.0.4",
+    "cookies": "^0.8.0",
+    "debug": "^3.1.0",
+    "deep-equal": "^1.0.1",
+    "delegates": "^1.0.0",
+    "depd": "^2.0.0",
+    "destroy": "^1.0.4",
+    "ee-first": "^1.1.1",
+    "encodeurl": "^1.0.2",
+    "error-inject": "^1.0.0",
+    "escape-html": "^1.0.3",
+    "fresh": "^0.5.2",
+    "http-assert": "^1.4.1",
+    "http-errors": "^1.7.3",
+    "inherits": "^2.0.4",
+    "is-generator-function": "^1.0.7",
+    "keygrip": "^1.1.0",
+    "koa": "^2.11.0",
+    "koa-compose": "^4.1.0",
+    "koa-convert": "^1.2.0",
+    "media-typer": "^0.3.0",
+    "mime-db": "^1.43.0",
+    "mime-types": "^2.1.26",
+    "ms": "^2.0.0",
+    "negotiator": "^0.6.2",
+    "nodejs-websocket": "^1.7.2",
+    "on-finished": "^2.3.0",
+    "only": "^0.0.2",
+    "parseurl": "^1.3.3",
+    "safe-buffer": "^5.1.2",
+    "setprototypeof": "^1.1.1",
+    "socket.io": "^2.3.0",
+    "statuses": "^1.5.0",
+    "toidentifier": "^1.0.0",
+    "tsscmp": "^1.0.6",
+    "type-is": "^1.6.18",
+    "vary": "^1.1.2",
+    "ylru": "^1.2.1"
+  },
+  "devDependencies": {},
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC"
+}

+ 80 - 0
server/app.js

@@ -0,0 +1,80 @@
+var fs = require('fs')
+var http = require('http')
+var socketIO = require('socket.io')
+var express = require("express");
+var path = require("path");
+
+
+var app = express();
+app.use(express.static(path.join(__dirname, '/'))); //设置 express  static 静态文件 
+
+app.get("/chat", (req, res) => {
+    fs.readFile("./client.html", (err, data) => {
+        if (err) throw err;
+        res.write(data);
+        res.end();
+    })
+})
+
+var server = http.createServer(app);
+
+var users = {};//  sid  socket
+var reflect = {};//  name  sid
+var io = socketIO.listen(server);
+io.on('connection', function (socket) {
+    console.log(socket.id + "已经连接完成")
+    // console.log(socket.id+"已经连接完成")
+    //每次连接都对应一个  sid
+    //每一个用户都有一个socket  对应一个 sid  对应一个  username
+    // console.log(socket.id);
+    io.sockets.emit('connectSucc', socket.id);
+
+    //
+    //发送私密消息
+    socket.on('private message', function (from, to, msg) {
+        // from -->sid
+        //to -->sid
+        for (const key in reflect) {
+            console.log(key, ":", reflect[key])
+        }
+        // console.log('I received a private message by ', reflect[from],from, ' say to ', reflect[to],to, msg);
+        if (reflect[to] in users) {
+            // console.log('to :' + to);
+            //to 222
+            // users[reflect[to]].emit('to' + to, { mess: msg });
+            users[reflect[to]].emit('to' + to, { person: from, content: msg });
+            console.log('to' + to);
+            console.log(reflect[to]);
+            //
+            // console.log(reflect[to],to+'_to');
+            // xor  <--> 222
+        }
+    });
+
+    //新增用户
+    socket.on('new user', function (data) {
+        reflect[data] = socket.id;
+        // var sidList =
+        //data 是 from 谁发的 添加到这个  users列表  登陆的用户
+
+        if (socket.id in users) {
+            socket.emit("userHasLogin");
+        } else {
+            // var nickname = data;
+            users[socket.id] = socket;
+            console.log(data, socket.id, "已经登录!")
+            // users["aaa"] = socket
+            //每一个登陆的用户有一个自己的socket
+        }
+        // console.info(users);
+    });
+    //断开连接
+    socket.on('disconnect', function () {
+        console.log('user' + socket.id + ' disconnected');
+    });
+});
+
+
+server.listen(8080, function () {
+    console.log('Listening at: http://localhost:8080');
+});

+ 79 - 0
server/index.js

@@ -0,0 +1,79 @@
+var server = require("http").createServer();
+module.exports = class WebSocketServer {
+  constructor() {
+    this.connMap = new Map();
+    this._pageMap = new Map();
+    this._count = 0;
+    this._users = [];
+  }
+
+  create() {
+    this.io = require("socket.io")(server, {
+      path: "/test",
+      serveClient: false,
+      // below are engine.IO options
+      pingInterval: 10000,
+      pingTimeout: 5000,
+      cookie: false,
+    });
+
+    server.listen(3000, { origins: "*" });
+
+    this.io.on("connection", (socket) => {
+      this._count = this._count >= this._users.length ? 0 : this._count;
+      let user = socket.handshake.query
+      this._users.push(user)
+      let userId = user.role === 'customer' ? 'customerId' : 'agentId'
+      let friendId = user.role !== 'customer' ? 'customerId' : 'agentId'
+      this.connMap.set(userId, socket);
+      socket.emit('vr_request', { userInfo: user });
+      this._count++;
+
+      socket.on("getJson", (data) => {
+        console.log("收到的信息为:" + data);
+        let msg = data;
+        let connTemp = this.connMap.get(friendId);
+        let action = msg.content.action
+        
+        socket.emit("action", action,()=>{
+          console.log(action)
+        });
+
+        !!connTemp && this.sendText(connTemp, msg, (msgSendFinally) => {
+          console.log(msgSendFinally)
+        });
+      });
+
+      console.log("WebSocket服务端建立完毕");
+
+      socket.on("disconnect", function (reason) {
+        // this.connMap[userId] && (delete this.connMap[userId])
+        // console.log(this.connMap)
+        console.log("关闭连接", reason);
+      });
+      socket.on("error", function (reason) {
+        console.log("异常关闭", reason)
+      });
+      return this;
+
+    });
+
+  }
+
+  close() {
+    this.server.disconnect(true);
+  }
+
+  sendText(socket, msg, cbOk) {
+    const msgSendFinally = msg;
+    let action = msg.content.action
+
+    socket.emit("action", action,()=>{
+      console.log(action)
+    });
+
+    socket.emit("vr_response", msgSendFinally,()=>{
+      cbOk && cbOk(msgSendFinally);
+    });
+  }
+};