-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
52 lines (40 loc) · 2.39 KB
/
index.js
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
'use strict';
var net = require('net'),
Pool = require('./lib/pool'),
Parser = require('./lib/parser'),
Response = require('./lib/response');
exports.createServer = function (config) {
if (!config.servers || !Object.keys(config.servers).length)
throw new Error('Servers can not be blank!');
var pool = new Pool(config.servers);
var server = net.createServer(function (socket) {
console.log('client connected')
var parser = new Parser();
var response = new Response(socket);
function reply(reply) {
pool.select(reply[1], function (err, client) {
response.commandQueue.push(client.id);
var cmd = reply[0];
if (cmd.toUpperCase() === 'INFO')
return response.write('redis_version:' + config.redisVersion, client.id);
if (!~SUPPORTED_COMMANDS.indexOf(cmd.toUpperCase()))
return response.error("ERR unsupported command '" + cmd + "'", client.id);
if (err)
return response.error('ERR Connection refused', client.id);
client.write(reply, response);
});
}
parser.on('error', function (err, buf) {});
socket.on('data', function (raw) {
setImmediate(function () {
parser.parse(raw, reply);
});
});
socket.on('end', function () {
});
socket.on('error', function () {
});
});
return server;
}
var SUPPORTED_COMMANDS = exports.commands = ['DEL','DUMP','EXISTS','EXPIRE','EXPIREAT','PERSIST','PEXPIRE','PEXPIREAT','PTTL','RESTORE','TTL','TYPE','APPEND','BITCOUNT','DECR','DECRBY','GET','GETBIT','GETRANGE','GETSET','INCR','INCRBY','INCRBYFLOAT','MGET','PSETEX','SET','SETBIT','SETEX','SETNX','SETRANGE','STRLEN','HDEL','HEXISTS','HGET','HGETALL','HINCRBY','HINCRBYFLOAT','HKEYS','HLEN','HMGET','HMSET','HSET','HSETNX','HVALS','LINDEX','LINSERT','LLEN','LPOP','LPUSH','LPUSHX','LRANGE','LREM','LSET','LTRIM','RPOP','RPOPLPUSH','RPUSH','RPUSHX','SADD','SCARD','SDIFF','SDIFFSTORE','SINTER','SINTERSTORE','SISMEMBER','SMEMBERS','SMOVE','SPOP','SRANDMEMBER','SREM','SUNION','SUNIONSTORE','ZADD','ZCARD','ZCOUNT','ZINCRBY','ZINTERSTORE','ZRANGE','ZRANGEBYSCORE','ZRANK','ZREM','ZREMRANGEBYRANK','ZREMRANGEBYSCORE','ZREVRANGE','ZREVRANGEBYSCORE','ZREVRANK','ZSCORE','ZUNIONSTORE','EVAL','EVALSHA'];