Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

74
LINES

< > BotCompany Repo | #1016875 // StefansOS_ConnectToServer

JavaX fragment (include) [tags: use-pretranspiled]

Transpiled version (8872L) is out of date.

sclass StefansOS_ConnectToServer implements AutoCloseable {
  DialogIO io;
  volatile bool on, verbose;
  Set<S> subs = synchroLinkedHashSet();
  VF1<S> onLine;
  S server = "botcompany.de";
  L<Runnable> onConnected = syncList();
  event newLine(S text);

  void start {
    if (on) ret;
    on = true;
    _connect();
    doEvery_daemon_highPriority(30000, r { if (io != null) sendLine("") });
  }
  
  void cleanMeUp { on = false; closeIO(); }
  public void close { cleanMeUp(); }
  
  void _connect {
    thread "Connect" {
      while (licensed() && on) {
        if (!tryToConnect()) continue with sleepSeconds(1);
        try {
          var io = talkTo(server, 6000);
          io.getSocket().setSoTimeout(30000+10000);
          print("Connected.");
          pcallFAll(onConnected);
          temp tempAfterwards(r { print("Disconnected.") });
          sendLine(io, format("computerID=*", computerID()));
          StefansOS_ConnectToServer.this.io = io;
          for (S channel : cloneList(subs)) sendLine(format("sub *", channel));
          print("Sent computer ID: " + computerID());
          S line;
          while ((line = io.readLine()) != null) {
            if (verbose) print("Server said: " + line);
            pcallF(onLine, line);
            newLine(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 { sendLine(format("sub *", channel); }
  }
  
  void startWithSubs(S... channels) {
    for (S channel : channels) sub(channel);
    start();
  }
  
  void sendLine(DialogIO io default io, S line) {
    if (io != null) {
      if (verbose) print("Sending to server: " + line);
      io.sendLine(line);
    }
    else print("Can't send, not connected: " + line);
  }
  
  swappable bool tryToConnect() { true; }
}

Author comment

Began life as a copy of #1016578

download  show line numbers  debug dex  old transpilations   

Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv

No comments. add comment

Snippet ID: #1016875
Snippet name: StefansOS_ConnectToServer
Eternal ID of this version: #1016875/28
Text MD5: bfa23e4f3b793b8c9afe51b9d8e94b63
Author: stefan
Category: javax / stefan's os
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-01-21 20:08:09
Source code size: 2159 bytes / 74 lines
Pitched / IR pitched: No / No
Views / Downloads: 585 / 1288
Version history: 27 change(s)
Referenced in: #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674)