');
-
- if(!srv.Config.appcache)
- pIndex = WIN32 ?
- Util.removeStr(pIndex, ' manifest=/cloudcmd.appcache') :
- Util.removeStr(pIndex, ' manifest="/cloudcmd.appcache"');
-
- return pIndex;
-
-}
-
-function appCacheProcessing(){
- var lAppCache = srv.AppCache,
-
- lFiles = [
- {'//themes.googleusercontent.com/static/fonts/droidsansmono/v4/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff' : './font/DroidSansMono.woff'},
- {'//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js' : './lib/client/jquery.js'}];
-
- if(srv.Minify._allowed.css)
- lFiles.push('./min/all.min.css');
-
- lAppCache.addFiles(lFiles);
- lAppCache.createManifest();
-}
-
-function readConfig(){
-
- /* Determining server.js directory
- * and chang current process directory
- * (usually /) to it.
- * argv[1] - is always script name
- */
- var lServerDir = path.dirname(process.argv[1]);
-
- if( DIR !== lServerDir ){
- console.log('current dir: ' + DIR);
- process.chdir(lServerDir);
- }
- console.log('server dir: ' + lServerDir + '\n' +
- 'reading configuretion file config.json...');
-
- if(Config){
- console.log('config.json readed');
+ LIBDIR = main.LIBDIR,
+ SRVDIR = main.SRVDIR,
- /* if command line parameter testing resolved
- * setting config to testing, so server
- * not created, just init and
- * all logs writed to screen
- */
- var lArg = process.argv;
- lArg = lArg[lArg.length - 1];
- if ( lArg === 'test' || lArg === 'test\r') {
- console.log(process.argv);
- Config.server =
- Config.logs = false;
+ path = main.path,
+ fs = main.path,
+ CloudFunc = main.cloudfunc,
+ Util = main.util,
+ update = main.update,
+
+ Server = main.require(DIR + 'server'),
+ srv = Server.CloudServer,
+ Config = main.config,
+ WIN32 = main.WIN32;
+
+ readConfig();
+ Server.start(Config, indexProcessing, appCacheProcessing);
+
+ if(update)
+ update.get();
+
+
+ function indexProcessing(pIndex, pList){
+ /* если выбрана опция минифизировать скрпиты
+ * меняем в index.html обычные css на
+ * минифицированый
+ */
+ if(srv.Minify._allowed.css){
+ var lReplace_s = '
' : '"/css/reset.css">');
+
+ pIndex = Util.removeStr(pIndex, lReplace_s);
+ pIndex = pIndex.replace('/css/style.css', srv.Minify.MinFolder + 'all.min.css');
}
-
- if (Config.logs) {
- console.log('log param setted up in config.json\n' +
- 'from now all logs will be writed to log.txt');
- writeLogsToFile();
- }
+
+ pIndex = pIndex.replace('
',
+ '
'+ pList);
+
+ /* меняем title */
+ pIndex = pIndex.replace('
Cloud Commander',
+ '' + CloudFunc.setTitle() + '');
+
+ if(!srv.Config.appcache)
+ pIndex = WIN32 ?
+ Util.removeStr(pIndex, ' manifest=/cloudcmd.appcache') :
+ Util.removeStr(pIndex, ' manifest="/cloudcmd.appcache"');
+
+ return pIndex;
+
}
-}
-
-/* function sets stdout to file log.txt */
-function writeLogsToFile(){
- var stdo = fs.createWriteStream('./log.txt');
- process.stdout.write = (function(write) {
- return function(string, encoding, fd) {
- stdo.write(string);
- };
- })(process.stdout.write);
-}
+ function appCacheProcessing(){
+ var lAppCache = srv.AppCache,
+
+ lFiles = [
+ {'//themes.googleusercontent.com/static/fonts/droidsansmono/v4/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff' : './font/DroidSansMono.woff'},
+ {'//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js' : './lib/client/jquery.js'}];
+
+ if(srv.Minify._allowed.css)
+ lFiles.push('./min/all.min.css');
+
+ lAppCache.addFiles(lFiles);
+ lAppCache.createManifest();
+ }
+
+ function readConfig(){
+
+ /* Determining server.js directory
+ * and chang current process directory
+ * (usually /) to it.
+ * argv[1] - is always script name
+ */
+ var lServerDir = path.dirname(process.argv[1]);
+
+ if( DIR !== lServerDir ){
+ console.log('current dir: ' + DIR);
+ process.chdir(lServerDir);
+ }
+ console.log('server dir: ' + lServerDir + '\n' +
+ 'reading configuretion file config.json...');
+
+ if(Config){
+ console.log('config.json readed');
+
+ /* if command line parameter testing resolved
+ * setting config to testing, so server
+ * not created, just init and
+ * all logs writed to screen
+ */
+ var lArg = process.argv;
+ lArg = lArg[lArg.length - 1];
+ if ( lArg === 'test' || lArg === 'test\r') {
+ console.log(process.argv);
+ Config.server =
+ Config.logs = false;
+ }
+
+ if (Config.logs) {
+ console.log('log param setted up in config.json\n' +
+ 'from now all logs will be writed to log.txt');
+ writeLogsToFile();
+ }
+ }
+ }
+
+ /* function sets stdout to file log.txt */
+ function writeLogsToFile(){
+ var stdo = fs.createWriteStream('./log.txt');
+
+ process.stdout.write = (function(write) {
+ return function(string, encoding, fd) {
+ stdo.write(string);
+ };
+ })(process.stdout.write);
+ }
+})();
\ No newline at end of file
diff --git a/lib/server/appcache.js b/lib/server/appcache.js
index 943a9a06..1f02ce99 100644
--- a/lib/server/appcache.js
+++ b/lib/server/appcache.js
@@ -1,134 +1,139 @@
-var DIR = process.cwd() + '/',
- main = require(DIR + './lib/server/main'),
- fs = main.fs,
- Util = main.util,
-/* varible contain all watched file names
- * {name: true}
- */
- FileNames = {},
- NamesList_s = '',
- FallBack_s = '',
-
-/* function thet use for crossplatform
- * access to fs.watch or fs.watchFile function
- */
- fs_watch = null,
- on_fs_watch = null,
- firstFileRead_b = true,
- Manifest = '';
-
-setWatachFunctions();
-
-/* function add file or files to manifest
- * Examples:
- * exports.addFiles('jquery.js'),
- * exports.addFiles(['jquery.js', 'client.js']);
- * exports.addFiles([{'http://cdn.jquery/jq.js':'jquery.js'}, 'client.js']);
- */
-exports.addFiles = function(pFileNames){
- /* if a couple files */
- if(pFileNames instanceof Array)
- for(var i=0; i < pFileNames.length; i++){
- /* if fallback setted up */
- var lCurrentName = pFileNames[i];
- if(typeof lCurrentName === 'object')
- for(var lName in lCurrentName){
- FallBack_s += lName + ' ' + lCurrentName[lName] + '\n';
- exports.watch(lCurrentName[lName]);
- }
-
- else exports.watch(pFileNames[i]);
- }
- else exports.watch(pFileNames);
+(function(){
+ "use strict";
-};
-
-
-exports.createManifest = function(){
- var lAllNames = main.require('hashes');
- if(lAllNames)
- for(var lName in lAllNames){
- if(lName.indexOf('min') > 0)
- lName = './min/' + lName;
- exports.watch(lName);
- }
- processManifest();
-};
-
-exports.watch = function(pFileName){
- console.log(pFileName + ' is watched');
+ var DIR = process.cwd() + '/',
+ main = require(DIR + './lib/server/main'),
+ fs = main.fs,
+ Util = main.util,
- if(!FileNames[pFileName] &&
- pFileName !== './cloudcmd.appcache'){
-
- /* adding try...catch
- * if watched files would be more then system limit
- */
- var lWatch_f = function(){
- Util.tryCatch(function(){
- fs_watch(pFileName, on_fs_watch(pFileName));
- });
- };
+ /* varible contain all watched file names
+ * {name: true}
+ */
+ FileNames = {},
+ NamesList_s = '',
+ FallBack_s = '',
+
+ /* function thet use for crossplatform
+ * access to fs.watch or fs.watchFile function
+ */
+ fs_watch = null,
+ on_fs_watch = null,
+ firstFileRead_b = true,
+ Manifest = '';
+
+ setWatachFunctions();
+
+ /* function add file or files to manifest
+ * Examples:
+ * exports.addFiles('jquery.js'),
+ * exports.addFiles(['jquery.js', 'client.js']);
+ * exports.addFiles([{'http://cdn.jquery/jq.js':'jquery.js'}, 'client.js']);
+ */
+ exports.addFiles = function(pFileNames){
+ /* if a couple files */
+ if(pFileNames instanceof Array)
+ for(var i=0; i < pFileNames.length; i++){
+ /* if fallback setted up */
+ var lCurrentName = pFileNames[i];
+ if(typeof lCurrentName === 'object')
+ for(var lName in lCurrentName){
+ FallBack_s += lName + ' ' + lCurrentName[lName] + '\n';
+ exports.watch(lCurrentName[lName]);
+ }
+
+ else exports.watch(pFileNames[i]);
+ }
+ else exports.watch(pFileNames);
- /* if file.exists function exist and
- * file actually exists
- */
- if(fs.exists)
- fs.exists(pFileName, lWatch_f);
- else lWatch_f();
-
- NamesList_s += pFileName + '\n';
- FileNames[pFileName] = true;
- }
- else if(firstFileRead_b){
- processManifest();
- firstFileRead_b = false;
- }
-};
-
-function setWatachFunctions(){
- if(main.WIN32){
- /* good on windows */
- fs_watch = fs.watch;
- on_fs_watch = onWatch;
- }
- else{
- /* good on linux */
- fs_watch = fs.watchFile;
- on_fs_watch = onWatchFile;
- }
-
-}
-
-function onWatch (pFileName){
- return function(pEvent, pFileName){
- console.log(pEvent);
- console.log('file ' + pFileName + ' is changed');
+ };
+
+
+ exports.createManifest = function(){
+ var lAllNames = main.require('hashes');
+ if(lAllNames)
+ for(var lName in lAllNames){
+ if(lName.indexOf('min') > 0)
+ lName = './min/' + lName;
+ exports.watch(lName);
+ }
processManifest();
};
-}
-
-function onWatchFile(pFileName){
- return function(pCurr, pPrev){
- if(pCurr.mtime !== pPrev.mtime){
+
+ exports.watch = function(pFileName){
+ console.log(pFileName + ' is watched');
+
+ if(!FileNames[pFileName] &&
+ pFileName !== './cloudcmd.appcache'){
+
+ /* adding try...catch
+ * if watched files would be more then system limit
+ */
+ var lWatch_f = function(){
+ Util.tryCatch(function(){
+ fs_watch(pFileName, on_fs_watch(pFileName));
+ });
+ };
+
+ /* if file.exists function exist and
+ * file actually exists
+ */
+ if(fs.exists)
+ fs.exists(pFileName, lWatch_f);
+ else lWatch_f();
+
+ NamesList_s += pFileName + '\n';
+ FileNames[pFileName] = true;
+ }
+ else if(firstFileRead_b){
+ processManifest();
+ firstFileRead_b = false;
+ }
+ };
+
+ function setWatachFunctions(){
+ if(main.WIN32){
+ /* good on windows */
+ fs_watch = fs.watch;
+ on_fs_watch = onWatch;
+ }
+ else{
+ /* good on linux */
+ fs_watch = fs.watchFile;
+ on_fs_watch = onWatchFile;
+ }
+
+ }
+
+ function onWatch (pFileName){
+ return function(pEvent, pFileName){
+ console.log(pEvent);
console.log('file ' + pFileName + ' is changed');
processManifest();
- }
- };
-}
-
-function processManifest(){
- Manifest = 'CACHE MANIFEST\n' +
- '#' + new Date() + '\n' +
- 'CACHE:\n' +
- NamesList_s +
- 'NETWORK:\n' +
- '*\n' +
- 'FALLBACK:\n' +
- FallBack_s;
-
- fs.writeFile('cloudcmd.appcache', Manifest, function(){
- console.log('cloudcmd.appcache refreshed');
- });
-}
\ No newline at end of file
+ };
+ }
+
+ function onWatchFile(pFileName){
+ return function(pCurr, pPrev){
+ if(pCurr.mtime !== pPrev.mtime){
+ console.log('file ' + pFileName + ' is changed');
+ processManifest();
+ }
+ };
+ }
+
+ function processManifest(){
+ Manifest = 'CACHE MANIFEST\n' +
+ '#' + new Date() + '\n' +
+ 'CACHE:\n' +
+ NamesList_s +
+ 'NETWORK:\n' +
+ '*\n' +
+ 'FALLBACK:\n' +
+ FallBack_s;
+
+ fs.writeFile('cloudcmd.appcache', Manifest, function(){
+ console.log('cloudcmd.appcache refreshed');
+ });
+ }
+})();
diff --git a/lib/server/main.js b/lib/server/main.js
index 16cf2f25..b1af8bc8 100644
--- a/lib/server/main.js
+++ b/lib/server/main.js
@@ -36,10 +36,11 @@
exports.appcache = srvrequire('appcache'),
exports.cloudfunc = librequire('cloudfunc'),
- exports.auth = srvrequire('auth'),
- exports.object = srvrequire('object');
+ exports.auth = srvrequire('auth'),
exports.socket = srvrequire('socket'),
exports.update = srvrequire('update'),
+ exports.minify = srvrequire('minify').Minify,
+ exports.cache = srvrequire('cache').Cache,
exports.zlib = mrequire('zlib');
@@ -70,4 +71,4 @@
*/
function isWin32(){ return process.platform === 'win32'; }
-})();
\ No newline at end of file
+})();
diff --git a/lib/server/object.js b/lib/server/object.js
deleted file mode 100644
index 85cb074d..00000000
--- a/lib/server/object.js
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Module contains Cloud Commander SS(Server Side) objects.
- *
- * List of objects:
- * - Cache
- * - Minify
- */
-
-var DIR = process.cwd() + '/',
- main = require(DIR + 'lib/server/main.js'),
- SRVDIR = main.SRVDIR;
-
-/*
- * Обьект для работы с кэшем
- * аналог клиентского обьекта
- * с тем отличием, что в нём
- * будут храниться серверные
- * данные, такие как файлы
- * отдаваемые клиенту
- * (файлы проэкта по большому
- * счёту, для ускорения
- * первичной загрузки)
- */
-exports.Cache = {
- /* приватный переключатель возможности работы с кэшем */
- _allowed :true,
- /* данные в которых храняться файлы
- * в формате <поле> : <значение>
- * _data[name]=pData;
- * одному имени соответствуют
- * одни данные
- */
- _data :{},
-
- /* функция говорит можно ли работать с кэшем */
- isAllowed :(function(){
- return this._allowed;
- }),
- /* функция устанавливает возможность работать с кэшем */
- setAllowed :(function(pAllowed){
- this._allowed=pAllowed;
- }),
- /* Если доступен кэш
- * сохраняем в него данные
- */
- set :(function(pName, pData){
- if(this._allowed && pName && pData){
- this._data[pName]=pData;
- }
- }),
- /* Если доступен Cache принимаем из него данные*/
- get :(function(pName){
- if(this._allowed && pName){
- return this._data[pName];
- }
- else return null;
- }),
-
- /* Функция очищает кэш*/
- clear :(function(){
- if(this._allowed){
- this._data={};
- }
- })
-};
-
-/* Обьект для сжатия скриптов и стилей
- * по умолчанию - сжимаються
- */
-exports.Minify = {
- /* pathes to directories */
- INDEX :'index.html',
- /* приватный переключатель минимизации */
- _allowed :{
- css : true,
- js : true,
- html : true,
- img : true
- },
-
- /* minimize even if file not changed */
- forse : false,
-
- /* функция разрешает или
- * запрещает минимизировать
- * css/js/html
- * @pAllowed: - структура, в которой
- * передаються параметры
- * минификации, вида
- * {js:true,css:true,html:false; img:true}
- * img отвечает за перевод картинок в base64
- * и сохранение их в css-файл
- */
- setAllowed :(function(pAllowed){
- if(pAllowed){
- this._allowed = pAllowed;
- }
- }),
-
- /*
- * Функция минимизирует css/js/html
- * если установлены параметры минимизации
- */
- doit :(function(){
- if(this._allowed.css ||
- this._allowed.js ||
- this._allowed.html){
- var lMinify;
- try{
- lMinify = require('minify');
- }catch(pError){
- this._allowed = {js:false,css:false,html:false};
-
- console.log('You coud install minify ' +
- 'for better download spead:\n' +
- 'npm i minify');
-
- return this._allowed;
- }
-
- /*
- * temporary changed dir path,
- * becouse directory lib is write
- * protected by others by default
- * so if node process is started
- * from other user (root for example
- * in nodester) we can not write
- * minified versions
- */
- this.MinFolder = '/' + lMinify.MinFolder;
-
- var lOptimizeParams = [];
- if (this._allowed.js) {
- lOptimizeParams.push('client.js');
- }
-
- if (this._allowed.html)
- lOptimizeParams.push(this.INDEX);
-
- if (this._allowed.css) {
- lOptimizeParams.push({
- './css/style.css' : this._allowed.img
- });
-
- lOptimizeParams.push({
- './css/reset.css': this._allowed.img
- });
- }
-
- if (lOptimizeParams)
- lMinify.optimize(lOptimizeParams);
-
- this.Cache = lMinify.Cache;
-
- return this._allowed;
- }
- }),
-
- optimize: function(pName, pParams){
- var lResult = true;
-
- pParams.force = this.force;
-
- if(this._allowed.css ||
- this._allowed.js ||
- this._allowed.html){
- var lMinify = main.require('minify');
-
- if(lMinify)
- lMinify.optimize(pName, pParams);
- else{
- lResult = false;
-
- this._allowed = {js:false,css:false,html:false};
- console.log('Could not minify ' +
- 'without minify module\n' +
- 'npm i minify');
- }
- }
- else lResult = false;
-
- return lResult;
- },
-
- /* minification folder name */
- MinFolder : '',
- Cache : {}
-};
\ No newline at end of file
diff --git a/lib/server/socket.js b/lib/server/socket.js
index 3e997318..2777bb69 100644
--- a/lib/server/socket.js
+++ b/lib/server/socket.js
@@ -1,136 +1,140 @@
/* module make possible connectoin thrue socket.io on a server */
-var DIR = process.cwd() + '/',
- main = require(DIR + 'lib/server/main'),
- SRVDIR = main.SRVDIR,
+(function(){
+ "use strict";
- io = main.require('socket.io'),
- update = main.srvrequire('update'),
- exec = main.child_process.exec,
+ var DIR = process.cwd() + '/',
+ main = require(DIR + 'lib/server/main'),
+ SRVDIR = main.SRVDIR,
+
+ io = main.require('socket.io'),
+ update = main.srvrequire('update'),
+ exec = main.child_process.exec,
+
+ ClientFuncs = [],
+ OnMessageFuncs = [],
+ Win32_b = main.WIN32;
- ClientFuncs = [],
- OnMessageFuncs = [],
- Win32_b = main.WIN32;
-
-/**
- * function listen on servers port
- * @pServer {Object} started server object
- */
-exports.listen = function(pServer){
- io = io.listen(pServer);
-
- /* number of connections */
- var lConnNum = 0;
- io.sockets.on('connection', function (socket){
- ++lConnNum;
- socket.send('{"stdout":"client connected"}');
+ /**
+ * function listen on servers port
+ * @pServer {Object} started server object
+ */
+ exports.listen = function(pServer){
+ io = io.listen(pServer);
- console.log('server connected');
-
- if(!OnMessageFuncs[lConnNum])
- OnMessageFuncs[lConnNum] = onMessage(lConnNum, socket);
-
- var lConn_func = OnMessageFuncs[lConnNum];
-
- socket.on('message', lConn_func);
-
- });
-};
-
-/**
- * function gets onMessage function
- * that execute needed command
- *
- * @param pConnNum, pSocket
- */
-function onMessage(pConnNum, pSocket){
- return function(pCommand) {
- console.log(pCommand);
+ /* number of connections */
+ var lConnNum = 0;
+ io.sockets.on('connection', function (socket){
+ ++lConnNum;
+ socket.send('{"stdout":"client connected"}');
- if( pCommand.indexOf('cloudcmd') === 0 ){
- pCommand = pCommand.replace('cloudcmd', '');
-
- if(pCommand.indexOf(' ') === 0){
- pCommand = pCommand.replace(' ','');
-
- if(pCommand.indexOf('update') === 0){
- if(update)
- update.get();
- }
-
- if(pCommand.indexOf('exit') === 0)
- pCommand = 'kill -9 ' + process.pid;
- }
- else {
- var lMsg = {
- stdout : 'cloudcmd exit - for shutdown cloudcmd',
- stderr : null
- };
-
- lMsg = JSON.stringify(lMsg);
- pSocket.send(lMsg);
-
- console.log('received from client: ' + pCommand);
- console.log('sended to client: ' + lMsg);
-
- return;
- }
- }
-
- /* if we on windows and command is build in
- * change code page to unicode becouse
- * windows use unicode on non English versions
- */
- if(Win32_b){
-
- var lWinCommand = pCommand.toUpperCase();
- if( Win32Commands.indexOf(lWinCommand) > 0 )
- pCommand = 'chcp 65001 |' + pCommand;
- }
- if(!ClientFuncs[pConnNum])
- ClientFuncs[pConnNum] = getExec(pSocket);
+ console.log('server connected');
- var lExec_func = ClientFuncs[pConnNum];
+ if(!OnMessageFuncs[lConnNum])
+ OnMessageFuncs[lConnNum] = onMessage(lConnNum, socket);
- exec(pCommand, lExec_func);
- };
-}
-
-
-/**
- * function send result of command to client
- * @param pSocket
- */
-function getExec(pSocket){
- return function(pError, pStdout, pStderr) {
- if (pError !== null) {
- console.log('exec error: ' + pError);
- }
-
- var lExec = {
- stdout : pStdout,
- stderr : pStderr || pError
- };
-
- var lExec_str = JSON.stringify(lExec);
- pSocket.send(lExec_str);
+ var lConn_func = OnMessageFuncs[lConnNum];
+
+ socket.on('message', lConn_func);
+
+ });
};
-}
-
-
-/* windows commands thet require
- * unicode charset on locales
- * different then English
- */
-var Win32Commands = ['ASSOC', 'AT', 'ATTRIB', 'BREAK', 'CACLS', 'CALL',
- 'CD', 'CHCP', 'CHDIR', 'CHKDSK', 'CHKNTFS', 'CLS',
- 'CMD', 'COLOR', 'COMP', 'COMPACT', 'CONVERT', 'COPY',
- 'DATE', 'DEL', 'DIR', 'DISKCOMP', 'DISKCOPY', 'DOSKEY',
- 'ECHO', 'ENDLOCAL', 'ERASE', 'EXIT', 'FC', 'FIND',
- 'FINDSTR', 'FOR', 'FORMAT', 'FTYPE', 'GOTO', 'GRAFTABL',
- 'HELP', 'IF', 'LABEL', 'MD', 'MKDIR', 'MODE', 'MORE',
- 'MOVE', 'PATH', 'PAUSE', 'POPD', 'PRINT', 'PROMPT',
- 'PUSHD', 'RD', 'RECOVER', 'REM', 'REN', 'RENAME',
- 'REPLACE', 'RMDIR', 'SET', 'SETLOCAL', 'SHIFT', 'SORT',
- 'START', 'SUBST', 'TIME', 'TITLE', 'TREE', 'TYPE',
- 'VER', 'VERIFY', 'VOL', 'XCOPY'];
\ No newline at end of file
+
+ /**
+ * function gets onMessage function
+ * that execute needed command
+ *
+ * @param pConnNum, pSocket
+ */
+ function onMessage(pConnNum, pSocket){
+ return function(pCommand) {
+ console.log(pCommand);
+
+ if( pCommand.indexOf('cloudcmd') === 0 ){
+ pCommand = pCommand.replace('cloudcmd', '');
+
+ if(pCommand.indexOf(' ') === 0){
+ pCommand = pCommand.replace(' ','');
+
+ if(pCommand.indexOf('update') === 0){
+ if(update)
+ update.get();
+ }
+
+ if(pCommand.indexOf('exit') === 0)
+ pCommand = 'kill -9 ' + process.pid;
+ }
+ else {
+ var lMsg = {
+ stdout : 'cloudcmd exit - for shutdown cloudcmd',
+ stderr : null
+ };
+
+ lMsg = JSON.stringify(lMsg);
+ pSocket.send(lMsg);
+
+ console.log('received from client: ' + pCommand);
+ console.log('sended to client: ' + lMsg);
+
+ return;
+ }
+ }
+
+ /* if we on windows and command is build in
+ * change code page to unicode becouse
+ * windows use unicode on non English versions
+ */
+ if(Win32_b){
+
+ var lWinCommand = pCommand.toUpperCase();
+ if( Win32Commands.indexOf(lWinCommand) > 0 )
+ pCommand = 'chcp 65001 |' + pCommand;
+ }
+ if(!ClientFuncs[pConnNum])
+ ClientFuncs[pConnNum] = getExec(pSocket);
+
+ var lExec_func = ClientFuncs[pConnNum];
+
+ exec(pCommand, lExec_func);
+ };
+ }
+
+
+ /**
+ * function send result of command to client
+ * @param pSocket
+ */
+ function getExec(pSocket){
+ return function(pError, pStdout, pStderr) {
+ if (pError !== null) {
+ console.log('exec error: ' + pError);
+ }
+
+ var lExec = {
+ stdout : pStdout,
+ stderr : pStderr || pError
+ };
+
+ var lExec_str = JSON.stringify(lExec);
+ pSocket.send(lExec_str);
+ };
+ }
+
+
+ /* windows commands thet require
+ * unicode charset on locales
+ * different then English
+ */
+ var Win32Commands = ['ASSOC', 'AT', 'ATTRIB', 'BREAK', 'CACLS', 'CALL',
+ 'CD', 'CHCP', 'CHDIR', 'CHKDSK', 'CHKNTFS', 'CLS',
+ 'CMD', 'COLOR', 'COMP', 'COMPACT', 'CONVERT', 'COPY',
+ 'DATE', 'DEL', 'DIR', 'DISKCOMP', 'DISKCOPY', 'DOSKEY',
+ 'ECHO', 'ENDLOCAL', 'ERASE', 'EXIT', 'FC', 'FIND',
+ 'FINDSTR', 'FOR', 'FORMAT', 'FTYPE', 'GOTO', 'GRAFTABL',
+ 'HELP', 'IF', 'LABEL', 'MD', 'MKDIR', 'MODE', 'MORE',
+ 'MOVE', 'PATH', 'PAUSE', 'POPD', 'PRINT', 'PROMPT',
+ 'PUSHD', 'RD', 'RECOVER', 'REM', 'REN', 'RENAME',
+ 'REPLACE', 'RMDIR', 'SET', 'SETLOCAL', 'SHIFT', 'SORT',
+ 'START', 'SUBST', 'TIME', 'TITLE', 'TREE', 'TYPE',
+ 'VER', 'VERIFY', 'VOL', 'XCOPY'];
+})();
diff --git a/lib/server/update.js b/lib/server/update.js
index 337dc0dc..774b220e 100644
--- a/lib/server/update.js
+++ b/lib/server/update.js
@@ -1,38 +1,42 @@
/* module update cloud commander */
-var DIR = process.cwd() + '/',
- main = require(DIR + 'lib/server/main'),
- mainpackage = main.mainpackage,
- exec = main.child_process.exec;
-
-exports.get = function(){
- exec('git pull', pull);
-};
-
-/**
- * function pulls cloud cmd content from repo
- * @param pError
- * @param pStdout
- * @param pStderr
- */
-function pull(pError, pStdout, pStderr){
+(function(){
+ "use strict";
- if(!pError){
- pStderr = '';
- if(pStdout !== 'Already up-to-date.\n'){
- pStdout = 'Cloud Commander updated. Restart to use new version.';
- }
- else pStdout = 'Cloud Commander is up to date.';
-
- console.log( process.cwd() );
- if(mainpackage)
- pStdout = 'Version ' + mainpackage.version + '\n' + pStdout;
- }
+ var DIR = process.cwd() + '/',
+ main = require(DIR + 'lib/server/main'),
+ mainpackage = main.mainpackage,
+ exec = main.child_process.exec;
- var lExec = {
- stdout : pStdout,
- stderr : pStderr || pError
+ exports.get = function(){
+ exec('git pull', pull);
};
- console.log(lExec);
-}
\ No newline at end of file
+ /**
+ * function pulls cloud cmd content from repo
+ * @param pError
+ * @param pStdout
+ * @param pStderr
+ */
+ function pull(pError, pStdout, pStderr){
+
+ if(!pError){
+ pStderr = '';
+ if(pStdout !== 'Already up-to-date.\n'){
+ pStdout = 'Cloud Commander updated. Restart to use new version.';
+ }
+ else pStdout = 'Cloud Commander is up to date.';
+
+ console.log( process.cwd() );
+ if(mainpackage)
+ pStdout = 'Version ' + mainpackage.version + '\n' + pStdout;
+ }
+
+ var lExec = {
+ stdout : pStdout,
+ stderr : pStderr || pError
+ };
+
+ console.log(lExec);
+ }
+})();
diff --git a/server.js b/server.js
index 338ad987..274a07fb 100644
--- a/server.js
+++ b/server.js
@@ -35,16 +35,6 @@ var CloudServer = {
* данные клиенту
*/
sendResponse : function () {},
-
- /* Обьект для работы с кэшем */
- Cache : {},
-
- /* Обьект через который
- * выполняеться сжатие
- * скриптов и стилей
- */
-
- Minify : {},
/* Асоциативный масив обьектов для
* работы с ответами сервера
@@ -88,7 +78,7 @@ var CloudServer = {
'.woff' : 'font/woff',
'.appcache' : 'text/cache-manifest',
'.mp3' : 'audio/mpeg'
- }
+ },
},
DirPath = '/',
@@ -114,17 +104,20 @@ if(!Zlib)
/* добавляем модуль с функциями */
var CloudFunc = main.cloudfunc,
Util = main.util;
+
+/* Обьект для работы с кэшем */
+CloudServer.Cache = main.cache,
+
+/* Обьект через который
+ * выполняеться сжатие
+ * скриптов и стилей
+ */
+CloudServer.Minify = main.minify,
+
+CloudServer.AppCache = main.appcache,
-CloudServer.AppCache = main.appcache;
CloudServer.Socket = main.socket;
-if(main.object){
- CloudServer.Cache = main.object.Cache;
- CloudServer.Minify = main.object.Minify;
-}
-else
- console.log('could not found one of Cloud Commander SS files');
-
/* базовая инициализация */
CloudServer.init = (function(pAppCachProcessing){
/* Переменная в которой храниться кэш*/