/*
* vim: softtabstop=4 shiftwidth=4 cindent foldmethod=marker expandtab
*
* $LastChangedDate$
* $Revision$
* $LastChangedBy$
* $URL$
*
* Copyright 2009-2011 Eric Connell
*
* This file is part of Mangler.
*
* Mangler is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Mangler is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mangler. If not, see .
*/
#include "mangler.h"
#include "manglernetwork.h"
#include "channeltree.h"
#include "manglersettings.h"
#include "manglercharset.h"
ManglerNetwork::ManglerNetwork(Glib::RefPtr builder) {
this->builder = builder;
}
void
ManglerNetwork::connect(Glib::ustring hostname, Glib::ustring port, Glib::ustring username, Glib::ustring password, Glib::ustring phonetic) {/*{{{*/
Glib::ustring server = hostname + ":" + port;
gdk_threads_enter();
builder->get_widget("connectButton", button);
button->set_sensitive(false);
gdk_threads_leave();
v3_debuglevel(Mangler::config["lv3_debuglevel"].toULong());
if (! v3_login((char *)server.c_str(), (char *)ustring_to_c(username).c_str(), (char *)password.c_str(), (char *)phonetic.c_str())) {
gdk_threads_enter();
button->set_label("gtk-disconnect");
mangler->errorDialog(c_to_ustring(_v3_error(NULL)));
mangler->wantDisconnect = true;
mangler->onDisconnectHandler();
builder->get_widget("statusbar", statusbar);
statusbar->pop();
statusbar->push("Not connected.");
gdk_threads_leave();
return;
}
gdk_threads_enter();
//mangler->channelTree->expand_all();
builder->get_widget("connectButton", button);
button->set_label("gtk-disconnect");
button->set_sensitive(true);
//builder->get_widget("serverTabLabel", label);
//label->set_label(server);
builder->get_widget("serverSelectComboBox", combobox);
combobox->set_sensitive(false);
mangler->statusIcon->set(mangler->icons["tray_icon_red"]);
gdk_threads_leave();
do {
_v3_net_message *msg;
if ((msg = _v3_recv(V3_BLOCK)) == NULL) {
//printf("recv() failed: %s\n", _v3_error(NULL));
return;
}
switch (_v3_process_message(msg)) {
case V3_MALFORMED:
_v3_debug(V3_DEBUG_INFO, "received malformed packet");
break;
case V3_NOTIMPL:
_v3_debug(V3_DEBUG_INFO, "packet type not implemented");
break;
case V3_OK:
_v3_debug(V3_DEBUG_INFO, "packet processed");
/*
if (v3_queue_size() > 0) {
fprintf("stderr", "there's something to do\n");
}
*/
break;
}
} while (v3_is_loggedin());
}/*}}}*/
void
ManglerNetwork::disconnect(void) {
v3_logout();
}