프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / socket.io_modules / mySocket.js

이력 | 보기 | 이력해설 | 다운로드 (4.83 KB)

1 39 HKM
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;