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

70
LINES

< > BotCompany Repo | #1001076 // talkTo

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

Libraryless. Click here for Pure Java version (3596L/24K).

1  
static DialogIO talkTo(int port) {
2  
  return talkTo("localhost", port);
3  
}
4  
5  
static int talkTo_defaultTimeout = 10000; // This is the CONNECT timeout
6  
static int talkTo_timeoutForReads = 0; // Timeout waiting for answers (0 = no timeout)
7  
8  
static ThreadLocal<Map<S, DialogIO>> talkTo_byThread = new ThreadLocal;
9  
10  
static DialogIO talkTo(S ip, int port) ctex {
11  
  S full = ip + ":" + port;
12  
  Map<S, DialogIO> map = talkTo_byThread.get();
13  
  if (map != null && map.containsKey(full)) ret map.get(full);
14  
  
15  
  if (isLocalhost(ip) && port == vmPort()) ret talkToThisVM();
16  
17  
  ret new talkTo_IO(ip, port);
18  
}
19  
20  
sclass talkTo_IO extends DialogIO { 
21  
  S ip;
22  
  int port;
23  
  Socket s;
24  
  Writer w;
25  
  BufferedReader in;
26  
  
27  
  *(S *ip, int *port) ctex {
28  
    s = new Socket;
29  
    try {
30  
      if (talkTo_timeoutForReads != 0)
31  
        s.setSoTimeout(talkTo_timeoutForReads);
32  
      s.connect(new InetSocketAddress(ip, port), talkTo_defaultTimeout);
33  
    } catch (Throwable e) {
34  
      fail("Tried talking to " + ip + ":" + port, e);
35  
    }
36  
  
37  
    w = new OutputStreamWriter(s.getOutputStream(), "UTF-8");
38  
    in = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
39  
  }
40  
  
41  
  boolean isLocalConnection() {
42  
    return s.getInetAddress().isLoopbackAddress();
43  
  }
44  
  
45  
  boolean isStillConnected() {
46  
    return !(eos || s.isClosed());
47  
  }
48  
  
49  
  void sendLine(String line) ctex {
50  
    lock lock;
51  
    w.write(line + "\n");
52  
    w.flush();
53  
  }
54  
  
55  
  S readLineImpl() ctex {
56  
    ret in.readLine();
57  
  }
58  
  
59  
  public void close() {
60  
    try {
61  
      if (!noClose) s.close();
62  
    } catch (IOException e) {
63  
      // whatever
64  
    }
65  
  }
66  
  
67  
  Socket getSocket() {
68  
    return s;
69  
  }
70  
}

Author comment

Began life as a copy of #1000937

download  show line numbers  debug dex  old transpilations   

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

No comments. add comment

Snippet ID: #1001076
Snippet name: talkTo
Eternal ID of this version: #1001076/11
Text MD5: 46dd88aa4e2273eb2ee46fe8402736f0
Transpilation MD5: e0f505a630cc5e694510e61f3a8e8234
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2019-07-13 21:36:57
Source code size: 1714 bytes / 70 lines
Pitched / IR pitched: No / No
Views / Downloads: 935 / 5882
Version history: 10 change(s)
Referenced in: [show references]