@@ -17,8 +17,11 @@ class MobileServerVerticle extends Verticle {
17
17
OBJECT_MAPPER . configure(Feature . ALLOW_UNQUOTED_FIELD_NAMES , true )
18
18
}
19
19
20
+ def connectionMap = [:]
21
+ def deviceMap = [:]
22
+ def sockets = []
23
+
20
24
def server
21
- NetSocket socket
22
25
23
26
24
27
@Override
@@ -36,20 +39,32 @@ class MobileServerVerticle extends Verticle {
36
39
vertx. eventBus
37
40
.registerHandler(" vertx.apps.get" , this . &handleListAppRequest)
38
41
.registerHandler(" vertx.app.start" , this . &startApplication)
42
+ .registerHandler(" vertx.devices.get" , this . &getDevices)
39
43
}
40
44
41
45
def handleListAppRequest (Message message ) {
46
+ println " listing applications"
47
+ def socket = deviceMap. get(message. body(). deviceId)
42
48
socket?. write(OBJECT_MAPPER . writeValueAsString([address : " android.apps.get" ]))
43
49
}
44
50
45
51
def startApplication (Message message ) {
52
+ println " starting application $message . body ()"
53
+ def socket = deviceMap. get(message. body(). deviceId)
46
54
socket?. write(OBJECT_MAPPER . writeValueAsString([address : " android.monitoring.start" , body : message. body()]))
47
55
}
48
56
57
+ def getDevices (Message message ) {
58
+ println " list devices"
59
+ message. reply(new ArrayList (connectionMap. values()))
60
+ }
61
+
49
62
@Override
50
63
def stop () {
51
64
println " Closing Mobile Server..."
52
- socket?. close()
65
+ sockets. each { socket ->
66
+ socket?. close()
67
+ }
53
68
server?. close { asyncResult ->
54
69
if (asyncResult. succeeded) {
55
70
println " Mobile Server closed"
@@ -63,8 +78,7 @@ class MobileServerVerticle extends Verticle {
63
78
def createSocketServer (config , closure ) {
64
79
65
80
vertx. createNetServer(). connectHandler { NetSocket socket ->
66
-
67
- this . socket = socket
81
+ sockets. add(socket)
68
82
Buffer body = new Buffer (0 )
69
83
70
84
socket. dataHandler { Buffer buffer ->
@@ -75,6 +89,11 @@ class MobileServerVerticle extends Verticle {
75
89
jsonMessages. eachWithIndex { messageJson , i ->
76
90
try {
77
91
def message = OBJECT_MAPPER . readValue(messageJson, Map . class)
92
+ if (message. address == " device.connect" ) {
93
+ connectionMap. put(socket, message. body)
94
+ deviceMap. put(message. body. imei, socket)
95
+ message. body. connected = true
96
+ }
78
97
vertx. eventBus. publish(message. address, message. body)
79
98
body = new Buffer (0 )
80
99
} catch (Exception e) {
@@ -87,7 +106,15 @@ class MobileServerVerticle extends Verticle {
87
106
}
88
107
89
108
socket. endHandler {
90
- // TODO publish client disconnected
109
+ def device = connectionMap. get(socket)
110
+ device. connected = false
111
+
112
+ vertx. eventBus. publish(" device.disconnect" , device)
113
+ sockets. remove(socket)
114
+ connectionMap. remove(socket)
115
+ deviceMap. remove(device. imei)
116
+
117
+ println " client disconnected"
91
118
}
92
119
93
120
}
0 commit comments