namespace Tmate { [SingleInstance] // *INDENT-OFF* class Stdout : Object { public enum TokenType { SOCKET, ADDRESS, MATES, EMPTY, COMMENT, RESTART, INIT, TERM, UNKNOWN, ERROR; public string to_string() { return EnumClass.to_string(typeof(TokenType), this) .replace("TMATE_STDOUT_TOKEN_TYPE_", "Tmate.Stdout.TokenType."); } } public class Token { public TokenType @class {get; private set;} public string[] list {get; private set;} public Token(string[] list, TokenType @class = UNKNOWN) { this.class = @class; this.list = list; } public string to_string() { if (this.list.length == 0) return "<%s>".printf(this.@class.to_string()); else if(this.list.length == 1) return "<%s {\"%s\"}>".printf( this.@class.to_string(), this.list[0]); else return "<%s {\n\t\"%s\"\n}>".printf( this.@class.to_string(), string.joinv("\",\n\t\"", this.list)); } } private Regex r_connect = /^Connecting to (.+)\.\.\.$/; private Regex r_socket = /^To connect.+ tmate -S (.+) attach$/; private Regex r_mates = /^.+ (joined|left) \(([^()]+)\) -- (\d+) clients? .+$/; private Regex r_closed = /^Session closed$/; private Regex r_restarted = /^Session shell restarted$/; private Regex r_comment = /^(Note: |Reconnecting)/; private Regex r_dnsfail = /^(?P
[^ ]+ lookup failure\.).+ \((non-recoverable )?(?P