/** * @TODO DESCR * @param string $url */ public function getConnection($url) { $this->client->getConnection($url, function ($conn) use($url) { $this->conn = $conn; $conn->attachedClients = new ObjectStorage(); if ($conn->connected) { Daemon::log('IRC bot connected at ' . $url); $conn->join($this->config->defaultchannels->value); $conn->bind('motd', function ($conn) { //Daemon::log($conn->motd); }); foreach ($this as $bouncerConn) { if (!$bouncerConn->attachedServer) { $bouncerConn->attachTo($conn); } } $conn->bind('command', function ($conn, $from, $cmd, $args) { if ($cmd === 'PONG') { return; } elseif ($cmd === 'PING') { return; } if ($from['orig'] === $conn->servername) { $from['orig'] = $this->config->servername->value; } $conn->attachedClients->each('commandArr', $from['orig'], $cmd, $args); }); $conn->bind('privateMsg', function ($conn, $msg) { Daemon::log('IRCBouncer: got private message \'' . $msg['body'] . '\' from \'' . $msg['from']['orig'] . '\''); }); $conn->bind('msg', function ($conn, $msg) { $msg['ts'] = microtime(true); $msg['dir'] = 'i'; $this->messages->insert($msg); }); $conn->bind('disconnect', function ($conn) use($url) { foreach ($this as $bouncerConn) { if ($bouncerConn->attachedServer === $conn) { $bouncerConn->detach(); } } $this->getConnection($url); }); } else { Daemon::log('IRCBouncer: unable to connect (' . $url . ')'); } }); }