@Override public void doStart() { state = STARTING; try { createServerSocket(); state = RUNNING; do { try { SocketServerThread sst = new SocketServerThread(serverSocket.accept()); sst.start(); sockets.add(sst); } catch (Throwable t) { error( "Failed to listen on Socket [" + id + "] on port [" + port + "]: " + t.getMessage()); } } while (getState() == RUNNING || getState() == STARTING); close(serverSocket); serverSocket = null; } catch (Throwable e) { state = FAILED; error("Error in Socet Gateway [" + id + "]: " + e.getMessage()); e.printStackTrace(); // throw CFMLEngineFactory.getInstance().getCastUtil().toPageException(e); } }
@Override public String sendMessage(Map _data) { Struct data = caster.toStruct(_data, null, false); String msg = (String) data.get("message", null); String originatorID = (String) data.get("originatorID", null); String status = "OK"; if (msg != null) { Iterator<SocketServerThread> it = sockets.iterator(); SocketServerThread sst; try { boolean hasSend = false; while (it.hasNext()) { sst = it.next(); if (originatorID != null && !sst._id.equalsIgnoreCase(originatorID)) continue; sst.writeOutput(msg); hasSend = true; } if (!hasSend) { if (sockets.size() == 0) { error("There is no connection"); status = "EXCEPTION"; } else { it = sockets.iterator(); StringBuilder sb = new StringBuilder(); while (it.hasNext()) { if (sb.length() > 0) sb.append(", "); sb.append(it.next()._id); } error( "There is no connection with originatorID [" + originatorID + "], available originatorIDs are [" + sb + "]"); status = "EXCEPTION"; } } } catch (Exception e) { e.printStackTrace(); error("Failed to send message with exception: " + e.toString()); status = "EXCEPTION"; } } return status; }