-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgdy.js
More file actions
116 lines (99 loc) · 2.42 KB
/
gdy.js
File metadata and controls
116 lines (99 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
require("./lib/comm/debug"); // for debug
require("./lib/comm/gdyutil"); // Add some util functions.
var EventEmitter = require("events").EventEmitter;
module.exports = new EventEmitter();
var readline = require("readline")
,cli; // command line interface variable
var net = require('net');
var message = require("./lib/comm/message")
,handlers = require("./message_handler").handlers;
process.stdin.setEncoding("utf8");
process.stdout.setEncoding("utf8");
var host="127.0.0.1", port=10086;
var client = net.connect(port, host);
client.setEncoding("utf8");
client.on("connect", connect);
client.on("data", onData);
client.on("error", onError);
client.on("close", onClose);
global.session = {}; // declare global session object
session.data = "";
session.mq=[];
session.state = "";
session.p = "gdy>"; // command prompt
session.timer = null;
// send message function
session.sendMessage = function(msg){
try{
var ret = client.write(message.pack(msg), function(){
});
}
catch(e){
return false;
}
return true;
}
// display command prompt
session.prompt = function(){
cli.prompt();
}
// end session
session.end = function(){
client.end();
}
// connect to server
function connect(){
session.state = "CONNECT";
session.timer = setTimeout(function (){
session.end();
}, 5000);
session.sendMessage(message.new("CONNECT"));
}
// receive data
function onData(data){
session.data += data;
session.data = session.data.slice(message.parseMessage(session.data, session.mq));
processMessage();
}
function onClose(){
DBG_LOG("i", "socket closed.");
process.exit(0);
}
// handle connection error
function onError(err){
if( err.errno == 'ECONNREFUSED' ){
console.log("Cannot connect to server.");
}else{
console.log("Unknow network error. ");
}
client.destroy();
}
// dispatch message
function processMessage(){
if( session.mq.length > 0){
while( session.mq.length>0){
var msg = session.mq.shift();
var fname = "f_" + msg.cmd.toLowerCase();
if( handlers.hasOwnProperty(fname) && typeof(handlers[fname]) == "function" ){
handlers[fname](msg);
}
else{
handlers["f_default"](msg);
}
}
}
}
// handle command line
cli = readline.createInterface(process.stdin, process.stdout);
cli.setPrompt(session.p, session.p.length);
cli.on('line', processCmd);
function processCmd(cmd){
if( cmd.length > 0){
if(!session.sendMessage(message.new(cmd))){
console.log("Disconnected from server.")
}
}
else{
cli.prompt();
}
}