Site Tools



This shows you the differences between two versions of the page.

Link to this comparison view

server_state [2015/06/05 02:26] (current)
Line 1: Line 1:
 +======Special Topic:​======
 +Each server in your server list has a //state// that it is in.
 +The valid states are:
 +^ Name       ^ Description ^
 +| CREATED ​   | The initial state while it is being added to the server list |
 +| RECONNECT ​ | Ready to be used: will be connected to when window points at it |
 +| DNS        | Server being brought up: Nonblocking DNS lookup in progress |
 +| CONNECTING | Server being brought up: Nonblocking connect in progress |
 +| SSL_CONNECTING | Server being brought up: Nonblocking SSL negotation in progress |
 +| REGISTERING | Server being brought up: IRC Protocol registration with the server in progress |
 +| SYNCING ​    | Connected to irc: Not all operations can be performed yet |
 +| ACTIVE ​     | Connected to irc: All operations are supported |
 +| EOF         | The server has rejected us and closed the network connection |
 +| ERROR       | We have rejected the server and are closing the network connection |
 +| CLOSING ​    | Disconnecting from irc: Not all operations may be performed |
 +| CLOSED ​     | Disconnected from irc: No operations may be performed |
 +| DELETED ​    | The final state while it is being removed from server list |
 +======Connecting to a server:​=======
 +Servers are not automatically connected to when you add them to the server
 +list.  Instead, they are in the //​RECONNECT//​ state which is quiescent.
 +Whenever you attach any window to the server when it is in the //​RECONNECT//​
 +state, it will automatically come up.
 +======Automatic Reconnection during connection:​======
 +Connection to a server is a complicated concept. ​ It involves the whole 
 +action from when a server has a window and is in //​RECONNECT//,​ until 
 +either the server reaches //SYNCING// or //CLOSED// with no
 +more addresses.
 +When a server with a window is in //​RECONNECT//,​ it switches to //DNS//
 +and looks up the addresses for its hostname. ​ This returns one or 
 +more addresses. ​ For each of the addresses returned, the server switches ​
 +to //​CONNECTING//​ and continues on until either it reaches //SYNCING// or 
 +//CLOSED// for that address.
 +If //SYNCING// is reached, the server throws away any remaining ​
 +addresses. ​ If //CLOSED// is reached, the client advances to the
 +next address and goes back to //​CONNECTING//​. ​ This continues until
 +either //SYNCING// is reached or //CLOSED// is reached and there are 
 +no more addresses left to try.
 +All of the above is to be considered a single "​connection attempt",​ and 
 +although all of the above actions are nonblocking and asynchronous,​ until 
 +one of the two terminal conditions are reached, the client cannot be thwarted.
 +Terminal condition one, success:
 +    on server_state "% % SYNCING"​ {
 +       xecho -b Server $0 has been accepted onto irc.
 +    }
 +Terminal condition two, failure:
 +    on server_state "% % CLOSED"​ {
 +       if (serverctl(GET $0 ADDRSLEFT) == 0) {
 +           xecho -b Server $0 could not connect to irc.  Help me!
 +       }
 +    }
 +Remember, //CLOSED// is not a terminal condition unless ADDRSLEFT is also 0!
 +You, the user, have the ability to terminate a connection to a particular
 +address by using [[disconnect]]. ​ See the help files for [[disconnect]] and
 +[[reconnect command|reconnect]] for important distinctions between the two.
 +======Disconnecting from a server:​======
 +If we are accepted onto irc, then the connection stays open until either
 +the server rejects us (closes our connection) or we reject the server (due
 +to a network error). ​ When the connection is severed, the server goes into 
 +either //EOF// or //ERROR// state to tell you who is closing, and then to 
 +the //CLOSING// state, and finally the //CLOSED// state.
 +======No automatic reconnection:​======
 +Once a server is in the //CLOSED// state and there are no more addresses ​
 +left to use (either because we have tried them all, or because we reached
 +the //SYNCING// state), it cannot be used again until it is reset to the 
 +//​RECONNECT//​ state.  ​
 +You can put a server in the //​RECONNECT//​ state with
 +  - [[reconnect command|reconnect]] //refnum//
 +  - [[server]] +//refnum//
 +  - [[window server]] //refnum//
 +======Script support:​======
 +The [[reconnect_script]] implements epic4 behavior of automatic reconnecting
 +to servers when you are disconnected. ​ Ordinarily the above technical ​
 +information is not interesting to the user, but only to those who need to
 +implement their own scripted reconnection scripts.
 +======Language Support:​======
 +An [[on server_status]] event is thrown whenever the status of a server ​
 +The $[[serverctl]](GET //refnum// STATUS) function can be used to query
 +the current state of the server.
 +Server states are an EPIC5 feature which were invented during the nonblocking
 +connection project. ​ They have been expanded during the nonblocking dns 
 +project, the nonblocking ssl project, and the reconnect script project.
server_state.txt ยท Last modified: 2015/06/05 02:26 (external edit)