--- a/spasm-account.c Tue May 16 21:22:43 2017 -0500
+++ b/spasm-account.c Tue May 16 22:54:51 2017 -0500
@@ -30,6 +30,7 @@
GSocketClient *socket_client;
GSocketConnection *socket_connection;
GOutputStream *output_stream;
+ GDataInputStream *input_stream; @@ -75,6 +76,7 @@
g_object_unref(G_OBJECT(sa->socket_connection));
g_object_unref(G_OBJECT(sa->output_stream));
+ g_object_unref(G_OBJECT(sa->input_stream)); g_object_unref(G_OBJECT(sa->session));
@@ -120,6 +122,26 @@
sa->output_stream = output_stream;
+purple_spasm_account_set_input_stream( + PurpleSpasmAccount *sa, + GDataInputStream *input_stream) + g_object_unref(G_OBJECT(sa->input_stream)); + sa->input_stream = input_stream; +purple_spasm_account_get_input_stream(const PurpleSpasmAccount *sa) { + g_return_val_if_fail(sa, NULL); + return g_object_ref(sa->input_stream); purple_spasm_account_get_cancellable(const PurpleSpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
--- a/spasm-account.h Tue May 16 21:22:43 2017 -0500
+++ b/spasm-account.h Tue May 16 22:54:51 2017 -0500
@@ -44,6 +44,9 @@
void purple_spasm_account_set_socket_connection(PurpleSpasmAccount *sa, GSocketConnection *socket_connection);
void purple_spasm_account_set_output_stream(PurpleSpasmAccount *sa, GOutputStream *output_stream);
+void purple_spasm_account_set_input_stream(PurpleSpasmAccount *sa, GDataInputStream *input_stream); +GDataInputStream *purple_spasm_account_get_input_stream(const PurpleSpasmAccount *sa); GCancellable *purple_spasm_account_get_cancellable(const PurpleSpasmAccount *sa);
SoupSession *purple_spasm_account_get_session(const PurpleSpasmAccount *sa);
--- a/spasm-chat.c Tue May 16 21:22:43 2017 -0500
+++ b/spasm-chat.c Tue May 16 22:54:51 2017 -0500
@@ -22,6 +22,72 @@
+/****************************************************************************** + *****************************************************************************/ +static void _purple_spasm_chat_read(PurpleSpasmAccount *sa); +_purple_spasm_chat_read_cb(GObject *obj, GAsyncResult *res, gpointer data) { + PurpleSpasmAccount *sa = (PurpleSpasmAccount *)data; + buffer = g_data_input_stream_read_line_finish( + G_DATA_INPUT_STREAM(obj), + /* g_data_input_stream_read_line_finish, will return null with error set + * on connection error. It will also return null with error not set if + * there is no content to read. + gchar *error_msg = NULL; + error_msg = g_strdup_printf( + "spasm lost connection with server : %s", + error_msg = g_strdup_printf("spasm server closed connection"); + purple_connection_error( + purple_spasm_account_get_connection(sa), + purple_debug_info("spasm", "chat buffer: %s\n", buffer); + _purple_spasm_chat_read(sa); +_purple_spasm_chat_read(PurpleSpasmAccount *sa) { + g_data_input_stream_read_line_async( + purple_spasm_account_get_input_stream(sa), + purple_spasm_account_get_cancellable(sa), + _purple_spasm_chat_read_cb, +/****************************************************************************** + *****************************************************************************/ _purple_spasm_chat_login_cb(GObject *obj, GAsyncResult *res, gpointer data) {
GCancellable *cancellable = NULL;
@@ -30,7 +96,7 @@
GSocketConnection *socket_connection = NULL;
PurpleConnection *purple_connection = NULL;
PurpleSpasmAccount *sa = (PurpleSpasmAccount *)data;
- gboolean auth_success = FALSE;
+ gboolean success = FALSE; cancellable = purple_spasm_account_get_cancellable(sa);
purple_connection = purple_spasm_account_get_connection(sa);
@@ -60,17 +126,41 @@
output = g_io_stream_get_output_stream(G_IO_STREAM(socket_connection));
- auth_success = g_output_stream_printf(
+ success = g_output_stream_printf(
purple_spasm_account_get_access_token(sa)
- g_prefix_error(&error, "failed to connect: ");
+ g_prefix_error(&error, "failed to set password: "); + purple_connection_error(purple_connection, error->message); + purple_connection_error(purple_connection, "unknown error"); + g_output_stream_flush(output, NULL, NULL); + /* now try to use our nick */ + success = g_output_stream_printf( + purple_spasm_account_get_name(sa) + g_prefix_error(&error, "failed to set nick : "); purple_connection_error(purple_connection, error->message);
@@ -82,16 +172,22 @@
- /* now try to use our nick */
+ g_output_stream_flush(output, NULL, NULL); + purple_spasm_account_set_input_stream( + g_data_input_stream_new( + g_io_stream_get_input_stream(G_IO_STREAM(socket_connection)) + _purple_spasm_chat_read(sa); purple_spasm_chat_login(PurpleSpasmAccount *sa) {
GSocketClient *socket_client = NULL;
- purple_debug_info("spasm", "attempting to login to the chat server\n");
socket_client = g_socket_client_new();
g_socket_client_connect_to_host_async(
@@ -103,3 +199,4 @@