root / HServer / 00.Server / 00.Program / socket.io_modules / mySocket.js
이력 | 보기 | 이력해설 | 다운로드 (4.83 KB)
1 |
var agent = require('../modules/agent_module'); |
---|---|
2 |
|
3 |
//#region [ variable ]
|
4 |
var httpServer = require('socket.io'); |
5 |
var io;
|
6 |
|
7 |
var mySocket = {};
|
8 |
|
9 |
// 소켓의 정보
|
10 |
var socketInfo = function(){ |
11 |
id = '',
|
12 |
name = ''
|
13 |
}; |
14 |
var socketArray = []; // 소켓들을 저장하고 있을 배열 |
15 |
//#endregion
|
16 |
|
17 |
//#region [ method ]
|
18 |
mySocket.setSocket = function(server){ |
19 |
io = new httpServer(server);
|
20 |
|
21 |
io.on('connection', function(client){ |
22 |
console.log('---------------------- connect | id : ' + client.id);
|
23 |
|
24 |
client.emit('data'); // 상대방 data event 호출 |
25 |
|
26 |
// 서버는 이쪽 이벤트를 실행해준다.
|
27 |
client.on('web', function(data){ |
28 |
console.log('------------------ web name : ' + data);
|
29 |
|
30 |
// 소켓을 정의 해준다.
|
31 |
var tmpSocket = new socketInfo(); |
32 |
tmpSocket.id = client.id; |
33 |
tmpSocket.name = data.name; |
34 |
|
35 |
socketArray.push(tmpSocket); // 소켓 배열에 넣어준다.
|
36 |
}); |
37 |
|
38 |
// 클라는 이쪽 이벤트를 실행해준다.
|
39 |
client.on('agent', function(data){ |
40 |
console.log('------------------ agent name : ' + data);
|
41 |
|
42 |
// agent 가 연결이 되었을때의 함수.
|
43 |
agent.connect(data, function(data, result){
|
44 |
if(checkServerLive())
|
45 |
mySocket.serverEmit('agent_connect', result);
|
46 |
}); |
47 |
|
48 |
var tmpSocket = new socketInfo(); |
49 |
tmpSocket.id = client.id; |
50 |
tmpSocket.name = data; |
51 |
|
52 |
socketArray.push(tmpSocket); // 소켓 배열에 넣어준다.
|
53 |
}); |
54 |
|
55 |
client.on('state', function(data){ |
56 |
console.log('---------------------------state : ' + data);
|
57 |
var info = findSocketInfo(client.id);
|
58 |
if(info!=null){ |
59 |
// 서버는 이 이벤트를 실행할 수 없기때문에 if 문을 생략한다.
|
60 |
agent.stateChange(info.name, data, function(err, result){
|
61 |
if(!err){
|
62 |
console.log('성공적인 state 변경');
|
63 |
} |
64 |
}); |
65 |
} |
66 |
}); |
67 |
|
68 |
// 연결이 끊겼을 경우 실행해준다.
|
69 |
client.on('disconnect', function(){ |
70 |
console.log('------------------- disconnect | id : ' + client.id);
|
71 |
var info = findSocketInfo(client.id);
|
72 |
if(info!=null){ |
73 |
if(info.name == 'server' ){ |
74 |
|
75 |
} else {
|
76 |
// TODO : db 의 정보도 변경해줘야한다.
|
77 |
agent.disconnect(info.name, function(err, result){
|
78 |
if(err == null&& result != null){ |
79 |
|
80 |
} |
81 |
}); |
82 |
agent.getOne(info.name, function(err, result){
|
83 |
if(!err){
|
84 |
if(result){
|
85 |
if(serverSocket != null) |
86 |
mySocket.serverEmit('agent_disconnect', result);
|
87 |
} |
88 |
} |
89 |
}); |
90 |
} |
91 |
} |
92 |
var locate = socketArray.indexOf(client.id);
|
93 |
socketArray.splice(locate, 1);
|
94 |
}); |
95 |
}); |
96 |
|
97 |
//setInterval(intervalFunc, 6000);
|
98 |
}; |
99 |
|
100 |
// 현재 서버가 살아 있는지 판별한다.
|
101 |
var checkServerLive = function(){ |
102 |
for( var i = 0 ; i < socketArray.length; i++){ |
103 |
if(socketArray[i].name == 'server'){ |
104 |
return true; |
105 |
} |
106 |
} |
107 |
return false; |
108 |
} |
109 |
|
110 |
// socketId 로 소켓의 정보를 찾아온다.
|
111 |
var findSocketInfo = function(socketId){ |
112 |
for( var i = 0 ; i < socketArray.length; i++){ |
113 |
if(socketArray[i].id == socketId){
|
114 |
return socketArray[i];
|
115 |
} |
116 |
} |
117 |
return null; |
118 |
} |
119 |
|
120 |
var findSocketInfoInMac = function(mac){ |
121 |
for( var i = 0 ; i < socketArray.length; i++){ |
122 |
if(socketArray[i].name == mac){
|
123 |
return socketArray[i];
|
124 |
} |
125 |
} |
126 |
return null; |
127 |
} |
128 |
|
129 |
mySocket.agentEmit = function(methodName){ |
130 |
for(var i = 0; i < socketArray.length; i++){ |
131 |
socketArray[i].emit(methodName); |
132 |
} |
133 |
}; |
134 |
|
135 |
mySocket.serverEmit = function(methodName, result){ |
136 |
serverSocket.emit(methodName, result); |
137 |
}; |
138 |
|
139 |
mySocket.modifyData = function(contentsName){ |
140 |
console.log('업데이트 할것이 있습니다.');
|
141 |
|
142 |
agent.FindAgentForContentName(contentsName, function(err, result){
|
143 |
if(err==null&&result!=null){ |
144 |
for(var i = 0 ; i< result.length; i++){ |
145 |
var socket = findSocketInfoInMac(result[i].mac);
|
146 |
socket.emit('update', result[i]);
|
147 |
} |
148 |
} |
149 |
}); |
150 |
}; |
151 |
|
152 |
function intervalFunc(){ |
153 |
io.emit('name');
|
154 |
}; |
155 |
|
156 |
//#endregion
|
157 |
|
158 |
module.exports = mySocket; |