sclass StefansOS_ConnectToServer extends AutoCloseable { DialogIO io; volatile bool on; Set subs = synchroLinkedHashSet(); VF1 onLine; void start { if (on) ret; on = true; _connect(); doEvery_daemon(30000, r { if (io != null) io.sendLine("") }); } void cleanMeUp { on = false; closeIO(); } public void close { cleanMeUp(); } void _connect { thread "Connect" { while (licensed() && on) { try { io = talkTo("smartbot.botcompany.de", 6000); io.getSocket().setSoTimeout(30000+10000); print("Connected."); temp tempAfterwards(r { print("Disconnected.") }); io.sendLine(format("computerID=*", computerID())); for (S channel : cloneList(subs)) io.sendLine(format("sub *", channel)); print("Sent computer ID: " + computerID()); S line; while ((line = io.readLine()) != null) pcallF(onLine, line); } catch e { // pcall would also do an annoying message box printShortException(e); } closeIO(); sleepSeconds(5); } } } void closeIO { if (io != null) { pcall { io.close(); } io = null; } } bool connected() { ret io != null; } void sub(S channel) { if (subs.add(channel) && io != null) pcall { io.sendLine(format("sub *", channel); } } void startWithSubs(S... channels) { for (S channel : channels) sub(channel); start(); } void sendLine(S line) { if (io != null) io.sendLine(line); else print("Can't send, not connected: " + line); } }