Skip to content

Commit 524f423

Browse files
authored
Merge pull request #4 from KernelWar/desarrollo
versión 0.3.0 -> nueva funcionalidad(ver pantalla)
2 parents c3ccd03 + 1cfe5eb commit 524f423

File tree

5 files changed

+170
-10
lines changed

5 files changed

+170
-10
lines changed

api-win/screen.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const { desktopCapturer } = require('electron')
2+
var navigatorElectron = null
3+
4+
5+
function setNavigator(value){
6+
navigatorElectron = value
7+
}
8+
9+
async function getVideoSources() {
10+
const inputSources = desktopCapturer.getSources({
11+
types: ['window', 'screen'],
12+
thumbnailSize: {
13+
width: 600,
14+
height: 400
15+
}
16+
})
17+
return inputSources;
18+
}
19+
20+
async function selectSource(source) {
21+
const constraints = {
22+
audio: false,
23+
video: {
24+
mandatory: {
25+
chromeMediaSource: 'desktop',
26+
chromeMediaSourceId: source.id
27+
}
28+
}
29+
};
30+
return navigator.mediaDevices.getUserMedia(constraints);
31+
}
32+
33+
module.exports = { getVideoSources, selectSource, setNavigator }

index.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
})();
1414
*/
1515
const environment = require('./environment/environment')
16-
const { app, BrowserWindow, nativeImage, ipcMain } = require('electron')
16+
const { app, BrowserWindow, nativeImage, ipcMain, ipcRenderer } = require('electron')
1717

1818
const express = require('express')
1919
const http = require('http')
@@ -93,6 +93,7 @@ fs.readFile(pathConfigServer, function (err, data) {
9393
}
9494
})
9595

96+
9697
ipcMain.on("setHost", (event, newhost) => {
9798
global._host = newhost;
9899
appexpress.set('host', newhost)
@@ -153,6 +154,7 @@ ipcMain.on("closeAll", (event) => {
153154
win.close()
154155
});
155156

157+
156158
function removeDevice() {
157159
global._system = null
158160
global._device = null
@@ -187,6 +189,26 @@ function resetSocketServer() {
187189

188190
}
189191

192+
//Eventos main process
193+
ipcMain.on("getDataStreamWebContent", (source) => {
194+
win.webContents.send("getDataStream", source)
195+
})
196+
197+
ipcMain.on("activateStreamWebContent", (source) => {
198+
console.log('-> Activate stream')
199+
win.webContents.send("activateStream", source)
200+
})
201+
202+
ipcMain.on("stopStreamWebContent", () => {
203+
console.log('-> Stop stream')
204+
win.webContents.send("stopStream")
205+
})
206+
207+
ipcMain.on("finalizeStreamWebContent", () => {
208+
console.log('-> Finalize stream')
209+
win.webContents.send("finalizeStream")
210+
})
211+
190212

191213
app.on('ready', () => {
192214
win = new BrowserWindow({
@@ -209,6 +231,7 @@ app.on('ready', () => {
209231
win.setIcon(nativeImage.createFromPath(iconPath))
210232
win.once('ready-to-show', () => {
211233
win.show()
234+
//win.webContents.send("hola")
212235
})
213236
if (process.env.NODE_ENV != 'production') {
214237
win.webContents.openDevTools()

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "oneconnection-server",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"description": "Server controlador de Windows",
55
"main": "index.js",
66
"scripts": {

socket/socket-app.js

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ const battery = require('battery-level')
77
const directories = require("../api-win/directories-win")
88
const shorcutsMedia = require("../api-win/shortcuts-media-win")
99
const session = require("../api-win/session-win")
10+
const screen = require('../api-win/screen')
1011
const os = require('os')
1112
const fs = require('fs')
1213
const os_utils = require('os-utils');
14+
const { ipcMain } = require("electron");
1315
let io = null
1416
//Monitores
1517
let checkConnected = null
1618
let updateData = null
1719
let cpuMonitor = null
18-
const path = require('path')
1920
const environment = require('./../environment/environment')
2021
let query = 'SELECT CurrentBrightness,InstanceName FROM WmiMonitorBrightness';
2122
let wmi = new WmiClient({
@@ -132,7 +133,7 @@ function listenMediaModule(socket) {
132133
function listenSesionModule(socket) {
133134

134135
let commandCmd = null
135-
commandCmd = environment.env.global+ "/config/displayOff.bat"
136+
commandCmd = environment.env.global + "/config/displayOff.bat"
136137

137138
socket.on("offScreen", () => {
138139
let message = {
@@ -142,7 +143,7 @@ function listenSesionModule(socket) {
142143
}
143144
const cmd = require('node-cmd');
144145
let wait = new Promise((resolve, reject) => {
145-
cmd.get("start /B \"\" \"" + commandCmd+"\"", function (err, data) {
146+
cmd.get("start /B \"\" \"" + commandCmd + "\"", function (err, data) {
146147
if (err) {
147148
console.log(err)
148149
message.error = true
@@ -257,6 +258,40 @@ function loadDevice(device) {
257258
console.log("fix null")
258259
}
259260
}
261+
function listenScreen(socket) {
262+
socket.on("getScreens", () => {
263+
screen.getVideoSources().then(data => {
264+
data.map(item => {
265+
item.thumbnail = item.thumbnail.toDataURL()
266+
})
267+
io.emit("onScreens", data)
268+
})
269+
})
270+
socket.on("onActivateStream", (source) => {
271+
ipcMain.emit("activateStreamWebContent", source)
272+
//console.log(source)
273+
//ipcMain.emit("initStream", source)
274+
})
275+
276+
socket.on("getDataStream", () => {
277+
ipcMain.emit("getDataStreamWebContent")
278+
})
279+
280+
ipcMain.on("onDataStream", (event, data) => {
281+
if(clientConnected() == false){
282+
console.log('-> STOP -> [exit app]')
283+
ipcMain.emit("finalizeStreamWebContent")
284+
}else{
285+
io.emit("streamLive", data)
286+
}
287+
});
288+
socket.on("stopStream", () => {
289+
ipcMain.emit("stopStreamWebContent")
290+
})
291+
socket.on("finalizeStream", () => {
292+
ipcMain.emit("finalizeStreamWebContent")
293+
})
294+
}
260295

261296
function listenInConnection() {
262297
io.on("connection", socket => {
@@ -275,6 +310,7 @@ function listenInConnection() {
275310
listenDirectoryModule(socket)
276311
listenMediaModule(socket)
277312
listenSesionModule(socket)
313+
listenScreen(socket)
278314

279315
});
280316

@@ -345,4 +381,12 @@ function getTimeNow() {
345381
let time = "[" + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "]"
346382
return time
347383
}
348-
module.exports = { initServer, listenInConnect, listenInConnection, deleteSocketServer, clientConnected, getTimeNow, desconectedClient }
384+
module.exports = {
385+
initServer,
386+
listenInConnect,
387+
listenInConnection,
388+
deleteSocketServer,
389+
clientConnected,
390+
getTimeNow,
391+
desconectedClient
392+
}

src/index.html

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ <h5 id="txt-device" class="card-title">---</h5>
134134
<div class="modal-content">
135135
<div class="modal-header">
136136
<h5 class="modal-title" id="staticBackdropLabel">Seleccione interfaz de red</h5>
137-
137+
138138
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
139139
<span aria-hidden="true">&times;</span>
140140
</button>
@@ -177,7 +177,8 @@ <h5 class="modal-title" id="staticBackdropLabel">Puerto</h5>
177177
pattern="/^([0-9])*$/" class="form-control" type="text">
178178
</div>
179179
<p style="font-size: 12px;">
180-
<strong>Puertos del 1024 al 49151:</strong> Son los puertos registrados, los que se utilizan por las aplicaciones y los juegos que instales en el ordenador.
180+
<strong>Puertos del 1024 al 49151:</strong> Son los puertos registrados, los que se
181+
utilizan por las aplicaciones y los juegos que instales en el ordenador.
181182
</p>
182183
</div>
183184
<div class="text-right">
@@ -198,19 +199,78 @@ <h5 class="modal-title" id="staticBackdropLabel">Puerto</h5>
198199
</div>
199200
</div>
200201
</div>
201-
202+
<video id="video-stream" style="display:none;visibility:hidden; width:0;height:0;" width="1000" autoplay></video>
203+
<canvas id="preview" style="display:none;visibility:hidden; width:0;height:0;" width="1000" height="800"></canvas>
202204
<script>
203205
window.jQuery = window.$ = require("jquery");
204206
</script>
205207
<script src="../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
206208
<script>
209+
var canvas = document.getElementById("preview");
210+
var context = canvas.getContext('2d');
211+
var video = document.getElementById("video-stream")
207212
const QRCode = require('qrcode');
208213
const Mustache = require('mustache')
209214
const os = require("os")
210215
var version = require('./../package.json').version
211216
$('html head').find('title').text('OneConnection server v' + version);
212217
$("#title-frame").text('OneConnection server v' + version)
213-
const { remote, ipcRenderer } = require("electron");
218+
const { remote, ipcRenderer, ipcMain } = require("electron");
219+
var frameStream
220+
var stream = null
221+
var streamActive = false
222+
var constraints = {
223+
audio: false,
224+
video: {
225+
mandatory: {
226+
chromeMediaSource: 'desktop',
227+
chromeMediaSourceId: null,
228+
maxWidth: 1000,
229+
maxHeight: 800
230+
}
231+
}
232+
};
233+
var frames = null
234+
ipcRenderer.on("activateStream", (event, source) => {
235+
//console.log('source.id : ', source.id, ' | chromeMediaSourceId: ', constraints.video.mandatory.chromeMediaSourceId)
236+
streamActive = false
237+
if (source.id != constraints.video.mandatory.chromeMediaSourceId) {
238+
console.log('Init stream')
239+
constraints.video.mandatory.chromeMediaSourceId = source.id
240+
} else {
241+
console.log("Resume stream")
242+
}
243+
stream = navigator.mediaDevices.getUserMedia(constraints)
244+
stream.then(mediaStream => {
245+
video.srcObject = mediaStream
246+
context.drawImage(video, 0, 0, 1000, 800);
247+
streamActive = true
248+
})
249+
});
250+
251+
ipcRenderer.on("getDataStream", (event) => {
252+
frames = setInterval(() => {
253+
if (streamActive) {
254+
//console.log('send data stream ...')
255+
context.drawImage(video, 0, 0, 1000, 800);
256+
ipcRenderer.send("onDataStream", canvas.toDataURL('image/webp', 0.7))
257+
}
258+
}, 10)
259+
})
260+
261+
ipcRenderer.on("stopStream", (event) => {
262+
clearInterval(frames)
263+
})
264+
265+
ipcRenderer.on("finalizeStream", (event) => {
266+
let tracks = video.srcObject.getTracks();
267+
tracks.forEach(track => track.stop());
268+
stream.srcObject = null;
269+
//video.pause()
270+
//video.currentTime = 0
271+
clearInterval(frames)
272+
streamActive = false
273+
})
214274
generateQR()
215275
$("#wait-device").hide();
216276
$("#device-info").hide();

0 commit comments

Comments
 (0)