/var/www/myprog.com.ua/server/node/ws
Edit: /var/www/myprog.com.ua/server/node/ws/users.js (23704B)
const Session = require('../objects/session');
const User = require('../objects/user');
const Core = require('../core');
const Client = require('../objects/client')
const log = require('../logs/log');
const Place = require('../objects/place');
const Camera = require('../objects/camera');
const Scenario = require('../objects/scenario');
const Host = require('../objects/host');
// require('../helpers/error');
module.exports = (WsServer) => {
WsServer.prototype.accept_user = function (socket) {
let _self = this;
socket.on(WHO.USER.PREFIX + 'join', (client_key) => _self.join_user(socket, client_key));
socket.on(WHO.USER.PREFIX + 'device_command', async (cmd) => {
console.debug("WsServer::device_command()::", cmd);
let data = JSON.parse(cmd);
_self.core.sessions_manager.send_to_host(data.host_id, data.command, data.value);
});
socket.on(WHO.USER.PREFIX + 'add_edit_host', async (data) => _self.add_edit_host(socket,data));
socket.on(WHO.USER.PREFIX + 'add_edit_scenario', async (data) => _self.add_edit_scenario(socket,data));
socket.on(WHO.USER.PREFIX + 'add_edit_place', async (data) => _self.add_edit_place(socket,data));
socket.on(WHO.USER.PREFIX + 'add_edit_camera', async (data) => _self.add_edit_camera(socket,data));
socket.on(WHO.USER.PREFIX + 'add_place_scenario', async (data) => _self.add_place_scenario(socket,data));
socket.on(WHO.USER.PREFIX + 'del_place_scenario', async (data) => _self.del_place_scenario(socket,data));
socket.on(WHO.USER.PREFIX + 'add_place_camera', async (data) => _self.add_place_camera(socket,data));
socket.on(WHO.USER.PREFIX + 'del_place_camera', async (data) => _self.del_place_camera(socket,data));
socket.on(WHO.USER.PREFIX + 'add_place_device', async (data) => _self.add_place_device(socket,data));
socket.on(WHO.USER.PREFIX + 'del_place_device', async (data) => _self.del_place_device(socket,data));
socket.on(WHO.USER.PREFIX + 'add_place_value', async (data) => _self.add_place_value(socket,data));
socket.on(WHO.USER.PREFIX + 'del_place_value', async (data) => _self.del_place_value(socket,data));
socket.on(WHO.USER.PREFIX + 'console_cmd', async (cmd) => {
console.debug("WsServer::console_cmd()::", cmd);
let body = '';
if(cmd=='help'||cmd=='?'){
body = 'Commands:
ping
show socks
show users
show rooms';
}else if(cmd=='ping'){
body = 'pong';
}else if(cmd=='all on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "1");
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "2");
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "4");
body = 'Relay ALL ON';
}else if(cmd=='all off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "1");
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "2");
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "4");
body = 'Relay ALL OFF';
}else if(cmd=='relay auto on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_auto", "on");
body = 'RELAY AUTO OFF ENABLE';
}else if(cmd=='relay auto off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_auto", "off");
body = 'RELAY AUTO OFF DISABLE';
}else if(cmd=='relay timeout 5'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_timeout", "5");
body = 'RELAY AUTO OFF TIMEOUT 5 sec';
}else if(cmd=='relay timeout 1500'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_timeout", "1500");
body = 'RELAY AUTO OFF TIMEOUT 25 min';
}else if(cmd=='send timer 10'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "send_timer", "10");
body = 'SEND TIMER 10 sec';
}else if(cmd=='send timer 60'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "send_timer", "60");
body = 'SEND TIMER 1 min';
}else if(cmd=='led red on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_on", "red");
body = 'LED RED ON';
}else if(cmd=='led green on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_on", "green");
body = 'LED GREEN ON';
}else if(cmd=='led blue on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_on", "blue");
body = 'LED BLUE ON';
}else if(cmd=='led yellow on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_on", "yellow");
body = 'LED YELLOW ON';
}else if(cmd=='led pink on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_on", "pink");
body = 'LED PINK ON';
}else if(cmd=='led off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "led_off", "");
body = 'LED OFF';
}else if(cmd=='1 on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "1");
body = 'Relay 1 ON';
}else if(cmd=='1 off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "1");
body = 'Relay 1 OFF';
}else if(cmd=='2 on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "2");
body = 'Relay 2 ON';
}else if(cmd=='2 off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "2");
body = 'Relay 2 OFF';
}else if(cmd=='3 on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "3");
body = 'Relay 3 ON';
}else if(cmd=='3 off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "3");
body = 'Relay 3 OFF';
}else if(cmd=='4 on'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_on", "4");
body = 'Relay 4 ON';
}else if(cmd=='4 off'){
_self.core.sessions_manager.send_to_room(WHO.HOST.VALUE, "relay_off", "4");
body = 'Relay 4 OFF';
}else if(cmd=='gh'){
body = 'run get_hosts()';
_self.get_hosts(socket,2);
}else if(cmd=='show socks'){
let socks = _self.core.sessions_manager.get_sockets();
let sessions = _self.core.sessions_manager.get_sessions();
body += "
Socks " + Object.keys(socks).length + ""
for (var c in socks) {
body += "[" + c + "] client_key=" + socks[c] + " type=" + sessions[c].type + " ver=" + sessions[c].ver + "\n"
//body += "[" + c + "] client_key=" + socks[c] + " type=" + c.type +"\n"
}
}else if(cmd=='show users'){
body = '
Users:';
let sessions = _self.core.sessions_manager.get_sessions();
for (var i in sessions) {
switch (sessions[i].type) {
case "user":
body += "[" + i + "] " + sessions[i].type + ": " + sessions[i].user.name
+ " id=" + sessions[i].user.id
+ " key=" + sessions[i].key
+ "
"
break
case "host":
body += "[" + i + "] " + sessions[i].type + ": " + sessions[i].host.name
+ " id=" + sessions[i].host.id
+ " key=" + sessions[i].key
+ "
"
break
case "system":
body += "[" + i + "]" + sessions[i].type + ": "
+ " id=" + sessions[i].user.id
+ " key=" + sessions[i].key
+ "
"
break
default:
body += "[" + i + "] " + sessions[i].user.name
+ " id=" + sessions[i].user.id
+ " key=" + sessions[i].key
+ " type=" + sessions[i].type + "
"
}
}
}else if(cmd=='show rooms'){
body = '
Rooms:';
for (var c in _self.io.sockets.adapter.rooms) {
body += "[" + c + "] " + _self.io.sockets.adapter.rooms[c].length + " users
"
}
}else{
body = 'Нет такой комманды';
}
_self.core.log(body);
});
socket.on(WHO.USER.PREFIX + 'get_hosts', async (user_id) => {
_self.get_hosts(socket,user_id);
});
socket.on(WHO.USER.PREFIX + 'get_values_history', async (value_id,period) => {
_self.get_values_history(socket,value_id,period);
});
}
WsServer.prototype.join_user = function (socket, token) {
console.debug("WsServer::join_user()::token = ", token);
var _self = this;
let session = new Session(token, socket);
_self.core.sessions_manager.add_socket(socket.client.id, session.key);
_self.core.service_users.get_client_by_token(session.key).then((user) => {
if (user instanceof Client) {
if (user.get_activated()) {
session.set_user(user);
_self.core.sessions_manager.add_user(session);
_self.core.sessions_manager.send_to_user(session.user.id, WHO.USER.PREFIX + "join", "Authorization success");
_self.core.sessions_manager.add_to_room(WHO.USER.VALUE, session);
_self.core.sessions_manager.send_to_room(WHO.USER.VALUE, WHO.USER.PREFIX + 'joined', session.user.get_name());
_self.core.sessions_manager.send_to_room(WHO.USER.VALUE, WHO.USER.PREFIX + 'info', session.user.get_name() + " connected to room: " + WHO.USER.VALUE);
_self.core.log('--- CONNECTED ---');
if (user.is_admin()) {
_self.core.sessions_manager.add_to_room(WHO.ADMIN.VALUE, session);
_self.core.log('Привет admin '+session.user.get_name());
}
// Load data
_self.core.service_places.get_user_places(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_places", JSON.stringify(j));
});
_self.core.service_scenario.get_user_scenario(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_scenario", JSON.stringify(j));
});
_self.core.service_places.get_user_places_scenario(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_places_scenario", JSON.stringify(j));
});
_self.core.service_places.get_user_places_cameras(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_places_cameras", JSON.stringify(j));
});
_self.core.service_places.get_user_places_devices(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_places_devices", JSON.stringify(j));
});
_self.core.service_places.get_user_places_values(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_places_values", JSON.stringify(j));
});
_self.core.service_events.get_user_events(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_events", JSON.stringify(j));
// console.log(j);
});
_self.core.service_hosts.get_user_hosts(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_hosts", JSON.stringify(j));
});
//_self.core.service_events.get_user_events_history(session.user.id).then((j) => {
//session.socket.emit(WHO.USER.PREFIX + "load_events_history", JSON.stringify(j));
//console.log(j);
//});
_self.core.service_cameras.get_user_cameras(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_cameras", JSON.stringify(j));
});
_self.core.service_devices.get_user_devices(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_devices", JSON.stringify(j));
});
_self.core.service_values.get_user_values(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_values", JSON.stringify(j));
});
//_self.core.service_values.get_user_values_history(session.user.id).then((j) => {
//session.socket.emit(WHO.USER.PREFIX + "load_values_history", JSON.stringify(j));
//console.log(j);
//});
_self.core.service_commands.get_user_commands(session.user.id).then((j) => {
session.socket.emit(WHO.USER.PREFIX + "load_commands", JSON.stringify(j));
});
console.debug("WsServer::join_user()::connected: " + session.key);
} else {
session.socket.emit(WHO.USER.PREFIX + "need_activation", "Authorization error");
console.debug("WsServer::join_user()::need activation: " + session.key);
}
} else {
session.socket.emit(WHO.USER.PREFIX + "need_login", "Authorization error");
console.debug("WsServer::join_user()::need login: " + session.key);
}
});
}
WsServer.prototype.get_hosts = function (socket, user_id) {
var _self = this;
console.debug("WsServer::get_hosts()::user_id = ", user_id);
let hosts = _self.core.service_devices.get_hosts(user_id);
if (hosts) {
//let json = car.get_json()
socket.emit(WHO.USER.PREFIX + "load_hosts", hosts);
//_self.core.sessions_manager.send_to_all_operators(WHO.USER.PREFIX + 'car_status', json);
}else{
socket.emit(WHO.USER.PREFIX + "error", "Load hosts error");
}
}
WsServer.prototype.get_values_history = function (socket, value_id, period) {
var _self = this;
console.debug("WsServer::get_values_history()::value_id = ", value_id);
_self.core.service_values.get_values_history(value_id, period).then((j) => {
console.debug("answer values count: "+j.length);
//console.debug(j);
socket.emit(WHO.USER.PREFIX + "load_values_history", JSON.stringify(j));
});
}
WsServer.prototype.add_edit_host = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::add_edit_host()::", json);
host = new Host();
data.id > 0 ? host.id = data.id : host.id = 0;
host.name = data.name;
data.deleted == null ? host.deleted = 0 : host.deleted = data.deleted;
_self.core.service_hosts.update_host(host).then((j) => {
if(j == null){
socket.emit(WHO.USER.PREFIX + "error", JSON.stringify({"error":"1","message":"add_edit_host error"}));
}else{
socket.emit(WHO.USER.PREFIX + "add_edit_host", JSON.stringify(j));
}
});
}
WsServer.prototype.add_edit_scenario = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
let session = _self.core.sessions_manager.get_session_by_socket(socket.id);
console.debug("WsServer::add_edit_scenario()::", json);
item = new Scenario();
data.id > 0 ? item.id = data.id : item.id = 0;
item.place_id = data.place_id;
item.name = data.name;
item.type = data.type;
item.json = JSON.stringify(data.json);
data.deleted == null ? item.deleted = 0 : item.deleted = data.deleted;
data.active == null ? item.active = 0 : item.active = data.active;
item.user_id = session.user.id;
_self.core.service_scenario.update_scenario(item).then((j) => {
if(j == null){
socket.emit(WHO.USER.PREFIX + "error", JSON.stringify({"error":"1","message":"add_edit_scenario error"}));
}else{
socket.emit(WHO.USER.PREFIX + "add_edit_scenario", JSON.stringify(j));
}
});
_self.core.load_scenario();
}
WsServer.prototype.add_edit_place = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
var isNew = true;
let session = _self.core.sessions_manager.get_session_by_socket(socket.id);
console.debug("WsServer::add_edit_place()::", json);
place = new Place();
if(data.id > 0){
place.id = data.id;
isNew = false;
}else{
place.id = 0;
}
data.deleted == null ? place.deleted = 0 : place.deleted = data.deleted;
place.name = data.name;
place.position = data.position;
_self.core.service_places.update_place(place).then((j) => {
if(j == null){
socket.emit(WHO.USER.PREFIX + "error", JSON.stringify({"error":"1","message":"add_edit_place error"}));
}else{
socket.emit(WHO.USER.PREFIX + "add_edit_place", JSON.stringify(j));
_self.core.service_places.add_user_place(session.user.id,place.id).then((j) => {
if(j == null){
socket.emit(WHO.USER.PREFIX + "error", JSON.stringify({"error":"1","message":"add_user_place error"}));
}else{
socket.emit(WHO.USER.PREFIX + "add_user_place", JSON.stringify(j));
}
});
}
});
}
WsServer.prototype.add_edit_camera = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
var isNew = true;
let session = _self.core.sessions_manager.get_session_by_socket(socket.id);
console.debug("WsServer::add_edit_camera()::", json);
camera = new Camera();
if(data.id > 0){
place.id = data.id;
isNew = false;
}else{
camera.id = 0;
}
camera.name = data.name;
camera.host = data.host;
camera.port = data.port;
camera.login = data.login;
camera.pass = data.pass;
camera.url = data.url;
data.deleted == null ? camera.deleted = 0 : camera.deleted = data.deleted;
_self.core.service_cameras.update_camera(camera).then((j) => {
if(j == null){
socket.emit(WHO.USER.PREFIX + "error", JSON.stringify({"error":"1","message":"add_edit_camera error"}));
}else{
socket.emit(WHO.USER.PREFIX + "add_edit_camera", JSON.stringify(j));
_self.core.service_cameras.add_user_camera(session.user.id, j.id);
}
});
}
// Select place device
WsServer.prototype.add_place_scenario = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::add_place_scenario()::", json);
_self.core.service_places.add_place_scenario(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "add_place_scenario", JSON.stringify(j));
});
}
WsServer.prototype.del_place_scenario = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::del_place_scenario()::", json);
_self.core.service_places.del_place_scenario(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "del_place_scenario", JSON.stringify(j));
});
}
WsServer.prototype.add_place_camera = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::add_place_camera()::", json);
_self.core.service_places.add_place_camera(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "add_place_camera", JSON.stringify(j));
});
}
WsServer.prototype.del_place_camera = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::del_place_camera()::", json);
_self.core.service_places.del_place_camera(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "del_place_camera", JSON.stringify(j));
});
}
WsServer.prototype.add_place_device = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::add_place_device()::", json);
_self.core.service_places.add_place_device(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "add_place_device", JSON.stringify(j));
});
}
WsServer.prototype.del_place_device = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::del_place_device()::", json);
_self.core.service_places.del_place_device(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "del_place_device", JSON.stringify(j));
});
}
WsServer.prototype.add_place_value = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::add_place_value()::", json);
_self.core.service_places.add_place_value(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "add_place_value", JSON.stringify(j));
});
}
WsServer.prototype.del_place_value = function (socket, json) {
var _self = this;
let data = JSON.parse(json);
console.debug("WsServer::del_place_value()::", json);
_self.core.service_places.del_place_value(data.place_id,data.id).then((j) => {
socket.emit(WHO.USER.PREFIX + "del_place_value", JSON.stringify(j));
});
}
}