Skip to content

Instantly share code, notes, and snippets.

@caromdreamer
Created November 20, 2019 22:36
Show Gist options
  • Select an option

  • Save caromdreamer/17e15373229c5c64ade699bbef04f746 to your computer and use it in GitHub Desktop.

Select an option

Save caromdreamer/17e15373229c5c64ade699bbef04f746 to your computer and use it in GitHub Desktop.
simple-peer real world example

node ws.js

python -m SimpleHTTPServer

document.getElementById ("button1").addEventListener ("click", ksoo, false);
var ws = new WebSocket("ws://localhost:3000");
// 연결이 수립되면 서버에 메시지를 전송한다
ws.onopen = function(event) {
// ws.send("Client message: Hi!");
}
// error event handler
ws.onerror = function(event) {
console.log("Server error message: ", event.data);
}
var Peer = require('simple-peer')
var peer1 = null;
ws.onmessage = function(event) {
console.log("Server message: ", event.data);
var msg = JSON.parse(event.data);
if(msg.type === 'call') {
peer1 = new Peer();
// 서버로 부터 메시지를 수신한다
peer1.on('signal', data => {
// when peer1 has signaling data, give it to peer2 somehow
ws.send(JSON.stringify({"type":"signal", "data":data}));
// peer2.signal(data)
})
// peer2.on('signal', data => {
// // when peer2 has signaling data, give it to peer1 somehow
// peer1.signal(data)
// })
// peer1.on('connect', () => {
// // wait for 'connect' event before using the data channel
// peer1.send(JSON.stringify({"type":"msg", "data":"hey peer2, how is it going?"}));
// })
peer1.on('data', data => {
// got a data channel message
console.log('got a message from peer1: ' + data)
})
} else if(msg.type === 'signal') {
peer1.signal(JSON.stringify(msg.data));
} else if(msg.type === 'msg') {
}
}
function ksoo() {
// var peer2 = new Peer()
peer1 = new Peer({ initiator: true});
ws.send(JSON.stringify({"type":"call"}));
// 서버로 부터 메시지를 수신한다
peer1.on('signal', data => {
// when peer1 has signaling data, give it to peer2 somehow
// ws.send(JSON.stringify(data));
ws.send(JSON.stringify({"type":"signal", "data":data}));
// peer2.signal(data)
})
// peer2.on('signal', data => {
// // when peer2 has signaling data, give it to peer1 somehow
// peer1.signal(data)
// })
peer1.on('connect', () => {
// wait for 'connect' event before using the data channel
peer1.send(JSON.stringify({"type":"msg", "data":"hey peer2, how is it going?"}));
// peer1.send('hey peer2, how is it going?')
})
peer1.on('data', data => {
// got a data channel message
console.log('got a message from peer1: ' + data)
})
}
<html>
<body>
<style>
#outgoing {
width: 600px;
word-wrap: break-word;
white-space: normal;
}
</style>
<textarea id="incoming"></textarea>
<input type="button" id="button1" value="TTTT" />
<pre id="outgoing"></pre>
</body>
<script src="bundle.js"></script>
</html>
<html>
<body>
<style>
#outgoing {
width: 600px;
word-wrap: break-word;
white-space: normal;
}
</style>
<form>
<textarea id="incoming"></textarea>
<button type="submit">submit</button>
</form>
<pre id="outgoing"></pre>
<script src="bundle.js"></script>
</body>
</html>
{
"name": "rtc",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"simple-peer": "^9.6.2",
"ws": "^7.2.0"
}
}
var WebSocketServer = require("ws").Server;
var wss = new WebSocketServer({ port: 3000 });
wss.getUniqueID = function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
}
return s4() + s4() + '-' + s4();
};
// 연결이 수립되면 클라이언트에 메시지를 전송하고 클라이언트로부터의 메시지를 수신한다
var wsArr = [];
wss.on("connection", function(ws) {
ws.id = wss.getUniqueID();
wsArr.push(ws);
console.log(ws.id);
// ws.send("Hello! I am a server.");
ws.on("message", function(message) {
var cnt = 0;
for(var i=0; i<wsArr.length; i++) {
if (ws.id != wsArr[i].id) {
cnt++;
wsArr[i].send(message);
}
}
console.log(cnt, "/", wsArr.length);
console.log("Received: %s", message);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment