iswydt.vala
author Stiletto <blasux@blasux.ru>
Wed, 24 Oct 2012 00:37:31 +0400
changeset 7 a49fb1ec5e2a
parent 3 dd7a02c6d476
child 12 d3e36b368fc5
permissions -rw-r--r--
Send a reason when interrupted by sigint
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     1
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     2
class Connection : Object {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     3
    public Lm.Connection cn;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     4
    public string jid;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     5
    public string password;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     6
    public string resource;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     7
    public string server;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     8
	public int port;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
     9
    public bool ssl;
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    10
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    11
    public enum State {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    12
        DISCONNECTED,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    13
        CONNECTING,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    14
        AUTHENTICATING,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    15
        CONNECTED
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    16
    }
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    17
        
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    18
    protected State _state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    19
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    20
    public State state {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    21
        get { return _state; }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    22
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    23
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
    24
    public Gee.ArrayList<Module> modules;
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    25
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    26
    public signal void state_changed(State old_state, State new_state, string description);
2
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    27
    public signal void check_time();
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    28
    protected void _change_state(State new_state, string description) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    29
        var old_state = this._state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    30
        if (old_state != new_state) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    31
            this._state = new_state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    32
            stderr.printf("State changed %s -> %s : %s\n",old_state.to_string(), new_state.to_string(), description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    33
            state_changed(old_state, new_state, description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    34
        } else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    35
            stderr.printf("State not changed %s : %s\n",old_state.to_string(), description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    36
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    37
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    38
    public Connection(Config cfg) {
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
    39
        this.modules = new Gee.ArrayList<Module>();
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    40
        this.jid = cfg["server","jid"];
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    41
        this.password = cfg["server","password"];
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    42
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    43
        this.server = cfg.get_default("server", "server", this.jid.split("@",2)[1]);
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    44
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    45
        if (cfg.has_key("server", "port"))
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    46
            this.port = cfg["server", "port"].to_int();
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    47
        else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    48
            this.port = Lm.Connection.DEFAULT_PORT;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    49
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    50
        this.ssl = (cfg.get_default("server", "ssl", "yes")=="yes");
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    51
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    52
        this.resource = cfg.get_default("server", "resource", "iswydt");
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    53
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    54
        cn = new Lm.Connection(this.server);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    55
        cn.set_disconnect_function((connection, reason) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    56
            stderr.printf("Disconnected: %s\n",reason.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    57
            _change_state(State.DISCONNECTED,reason.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    58
        }, null);
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    59
        var msg_handler = new Lm.MessageHandler((handler, connection, message) => {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    60
            stdout.printf("Got msg\n");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    61
            var node = message.get_node();
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    62
            var body = node.find_child("body");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    63
            if (body!=null) {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    64
                stdout.printf("MSG %s to %s: %s\n", node.get_attribute("from"), node.get_attribute("to"), body.get_value());
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    65
            }
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    66
            return Lm.HandlerResult.ALLOW_MORE_HANDLERS;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    67
        }, null);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    68
        cn.register_message_handler(msg_handler, Lm.MessageType.MESSAGE, Lm.HandlerPriority.NORMAL);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    69
        /*var muc_handler = new Lm.MessageHandler((handler, connection, message) => {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    70
            var node = message.node;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    71
            var from = node.get_attribute("from");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    72
            if (from != null) {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    73
                var froms = from.split("/",2);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    74
                //stdout.printf("From: %s %s\n",node.to_string(),message.get_type().to_string());
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    75
                if (rooms.has_key(froms[0])) {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    76
                    return rooms[froms[0]].muc_handler(handler, connection, message);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    77
                }
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    78
            }
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    79
            return Lm.HandlerResult.ALLOW_MORE_HANDLERS;
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    80
        }, null);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    81
        cn.register_message_handler(muc_handler, Lm.MessageType.MESSAGE, Lm.HandlerPriority.NORMAL);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    82
        cn.register_message_handler(muc_handler, Lm.MessageType.PRESENCE, Lm.HandlerPriority.NORMAL);
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    83
        cn.register_message_handler(muc_handler, Lm.MessageType.IQ, Lm.HandlerPriority.NORMAL);*/
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    84
        state_changed.connect( (olds, news, desc) => {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    85
            if (news == Connection.State.CONNECTED) {
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    86
                cn.send_raw("<message to='stiletto@stiletto.name'><body>ТХБ</body></message>");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    87
                /*var room = new Conference(this, "говнохост@conference.blasux.ru", "Ζαλυπα");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    88
                room.join("Oh hai");
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    89
                this.rooms[room.jid] = room;*/
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    90
            }
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
    91
        });
2
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    92
        check_time.connect( () => {
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    93
            if (_state == State.DISCONNECTED)
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    94
                open();
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    95
        });
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    96
    }
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
    97
    public void add_module(Module module) {
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
    98
        modules.add(module);
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
    99
    }
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   100
    public void open() {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   101
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   102
        stderr.printf("Connecting to %s:%d as %s\n",server,port,jid);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   103
        cn.set_port(port);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   104
        cn.set_jid(jid);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   105
        _change_state(State.CONNECTING,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   106
        try {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   107
            var result = cn.open((connection, consuc) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   108
                stderr.printf("Connection success: %s\n",consuc.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   109
                if (consuc) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   110
                    _change_state(State.AUTHENTICATING,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   111
                    stderr.printf("Authing\n");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   112
                    cn.authenticate(jid.split("@",2)[0],password, resource, (connection, authsuc) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   113
                        stderr.printf("Auth success: %s\n",authsuc.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   114
                        if (authsuc) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   115
                            _change_state(State.CONNECTED,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   116
                        } else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   117
                            cn.close();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   118
                    }, null);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   119
                } else {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   120
                    _change_state(State.DISCONNECTED, "Connection not successful");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   121
                }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   122
            }, null);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   123
            if (!result)
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   124
                _change_state(State.DISCONNECTED, "Open failed");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   125
        } catch (Error e) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   126
            stderr.printf("Error: %s\n", e.message);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   127
            _change_state(State.DISCONNECTED, e.message);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   128
        }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   129
    }
7
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   130
    public void close(string reason) {
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   131
        if ((state==State.CONNECTED)&&(reason != null)) {
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   132
            var prs = new Lm.Message(null, Lm.MessageType.PRESENCE);
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   133
            prs.node.set_attribute("type","unavailable");
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   134
            prs.node.add_child("status",reason);
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   135
            cn.send(prs);
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   136
        }
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   137
        cn.close();
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   138
    }
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   139
}
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   140
    
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   141
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   142
static Connection account;
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   143
static MainLoop loop;
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   144
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   145
int main(string[] args) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   146
    if (args.length<2) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   147
        stderr.printf("Usage: %s <config file>\n",args[0]);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   148
        return 1;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   149
    }
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
   150
    Log.set_handler("Muc", (LogLevelFlags)65535, (domain, levels, message) => {
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   151
        stderr.printf("--- %s\n", message);
1
76caf6a3f413 Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents: 0
diff changeset
   152
    });
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   153
    Log.set_handler("muc_log", (LogLevelFlags)65535, (domain, levels, message) => {
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   154
        stderr.printf("--- %s\n", message);
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   155
    });
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   156
    log("LM", LogLevelFlags.LEVEL_DEBUG, "HATE HATE");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   157
    var cfg = new Config.from_file(args[1]);
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   158
    loop = new MainLoop();
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   159
    account = new Connection(cfg);
2
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   160
    //account.open();
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   161
    stdout.printf("Fuck yeah\n");
2
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   162
    var checktimer = new TimeoutSource(2000);
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   163
    checktimer.set_callback(() => {
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   164
        account.check_time();
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   165
        //stderr.printf("TimeoutSource OLOLO\n");
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   166
        return true;
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   167
    });
4e050075fab9 Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
   168
    checktimer.attach(loop.get_context());
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   169
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   170
    account.add_module(new ModuleMuc(cfg, account));
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   171
    account.add_module(new ModuleMucLog(cfg, account));
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   172
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   173
    Posix.sigaction_t action = Posix.sigaction_t();
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   174
    action.sa_handler = ((i) => {
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   175
        if (account.state != Connection.State.CONNECTED)
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   176
            loop.quit();
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   177
        else {
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   178
            account.state_changed.connect( (olds, news, desc) => {
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   179
                if (news == Connection.State.DISCONNECTED)
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   180
                    loop.quit();
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   181
            });
7
a49fb1ec5e2a Send a reason when interrupted by sigint
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
   182
            account.close("Received SIGINT");
3
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   183
        }
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   184
    });
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   185
    Posix.sigaction(Posix.SIGINT, action, null);
dd7a02c6d476 muc log, updated example config
Stiletto <blasux@blasux.ru>
parents: 2
diff changeset
   186
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   187
    loop.run();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   188
    return 0;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   189
}