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

65
LINES

< > BotCompany Repo | #1000776 // Kill Switch!

JavaX source code [tags: use-pretranspiled] - run with: x30.jar

Libraryless. Click here for Pure Java version (206L/2K/6K).

1  
!747
2  
!721 // thread {
3  
4  
!include #1000774 // CircularFifoBuffer
5  
!include #1000782 // Flag
6  
7  
m {
8  
  static int port = 1234;
9  
  static new Flag killFlag;
10  
11  
  p {
12  
    installKillSwitch();
13  
    print("Hello world. Sleeping. Port=" + port);
14  
    killFlag.waitUntilUp();
15  
  }
16  
17  
  static void installKillSwitch() ctex {
18  
    final ServerSocket serverSocket = new ServerSocket(1234);
19  
    //serverSocket.setSoTimeout(1000);
20  
    
21  
    daemon { // todo: higher priority
22  
      while (true) {
23  
        try {
24  
          final Socket s = serverSocket.accept();
25  
          print("connect");
26  
          thread {
27  
            InputStream in = s.getInputStream();
28  
            CircularFifoBuffer<Character> b = new CircularFifoBuffer<Character>(4);
29  
            while (true) {
30  
              int i = in.read();
31  
              if (i < 0) break;
32  
              print(i);
33  
              b.add((char) i);
34  
              S s = getLast(b, 4);
35  
              //print("> " + s);
36  
              if (s == "kill")
37  
                killMe();
38  
            }
39  
            print("disconnect");
40  
          }
41  
        } catch (SocketTimeoutException e) {
42  
        }
43  
      }
44  
    }
45  
  }
46  
  
47  
  static void killMe() {
48  
    print("killing");
49  
    
50  
    // keepWakingUp(); // see sleep() above. Does this make sense?
51  
    
52  
    System.exit(0); // This works.
53  
54  
    // killFlag.raise(); // And this is a very safe way to do it too.
55  
  }
56  
57  
  static S getLast(CircularFifoBuffer<Character> b, int n) {
58  
    n = Math.min(n, b.size());
59  
    new StringBuilder buf;
60  
    Iterator<Character> it = b.getBackingStore().descendingIterator();
61  
    for (int i = 0; i < n; i++)
62  
      buf.append(it.next());
63  
    return buf.reverse().toString();
64  
  }
65  
}

Author comment

Began life as a copy of #1000775

download  show line numbers  debug dex  old transpilations   

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

No comments. add comment

Snippet ID: #1000776
Snippet name: Kill Switch!
Eternal ID of this version: #1000776/1
Text MD5: be05b2dcc0789c1ad3003ec2ee8c92eb
Transpilation MD5: 9f9b363f0a44c3e5b427d179785f6243
Author: stefan
Category:
Type: JavaX source code
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2015-08-27 02:01:33
Source code size: 1712 bytes / 65 lines
Pitched / IR pitched: No / Yes
Views / Downloads: 601 / 575
Referenced in: [show references]