int parse_room(t_env *env, t_parser *p, char **split) { t_room_list *lst; t_room *room; if (!is_nbr(split[1]) || !is_nbr(split[2]) || p->link_part) return (0); lst = env->rooms; while (lst) { if (!ft_strcmp(lst->room->name, split[0])) return (0); lst = lst->next; } if (!(lst = malloc(sizeof(*lst)))) error_quit("Failed to malloc room list"); room = room_create(); room->name = split[0]; lst->room = room; lst->next = env->rooms; env->rooms = lst; if (!check_start_end(env, room, p)) return (0); return (1); }
/*------------------------------------------------------------------------ * Received a Subscription Request to a MultiMX room. * * @param session The MXit session object * @param contact The invited MultiMX room's contact information * @param creator The nickname of the room's creator / invitor */ void multimx_invite(struct MXitSession* session, struct contact* contact, const char* creator) { GHashTable *components; struct multimx* multimx = NULL; purple_debug_info(MXIT_PLUGIN_ID, "Groupchat invite to '%s' by '%s'\n", contact->alias, creator); /* Create a new room */ multimx = room_create(session, contact->username, contact->alias, STATE_INVITED); components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert(components, g_strdup("room"), g_strdup(contact->alias)); /* Call libpurple - will trigger either 'mxit_chat_join' or 'mxit_chat_reject' */ serv_got_chat_invite(session->con, contact->alias, creator, NULL, components); }
void house::_connect_signals() { connect(_action_quit, SIGNAL(triggered()), app(), SLOT(quit())); connect(_msg_field, SIGNAL(returnPressed()), this, SLOT(send_message())); connect(_action_cancel, SIGNAL(triggered()), this, SLOT(interrupt())); connect(_action_chatting, SIGNAL(triggered()), this, SLOT(change_user_status_to_chatting())); connect(_action_away, SIGNAL(triggered()), this, SLOT(change_user_status_to_away())); connect(_action_playing, SIGNAL(triggered()), this, SLOT(change_user_status_to_playing())); connect(_action_donotdisturb, SIGNAL(triggered()), this, SLOT(change_user_status_to_dont_disturb())); connect(_action_create_room, SIGNAL(triggered()), this, SLOT(room_create())); connect(_action_join_room, SIGNAL(triggered()), this, SLOT(room_join_selected())); connect(_action_refresh, SIGNAL(triggered()), this, SLOT(refresh())); connect(_action_settings, SIGNAL(triggered()), this, SLOT(open_settings())); _menu_comp->addAction(_action_rvr_1vs1); _menu_comp->addAction(_action_rvr_player_profiles); connect(_action_about_rvh, SIGNAL(triggered()), this, SLOT(open_about())); connect(_rooms_view, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(room_join_selected(QTreeWidgetItem *, int))); connect(_users_view, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(open_private_room(QTreeWidgetItem *, int))); QSignalMapper *openUrlSignalMapper = new QSignalMapper(this); openUrlSignalMapper->setMapping(_action_rvr_wwwsite, conf()->get_value("www/rvr_home").c_str()); openUrlSignalMapper->setMapping(_action_rvr_1vs1, conf()->get_value("www/rvr_1vs1").c_str()); openUrlSignalMapper->setMapping(_action_rvr_player_profiles, conf()->get_value("www/rvr_players").c_str()); openUrlSignalMapper->setMapping(_action_routerfw_help, conf()->get_value("www/help_router").c_str()); openUrlSignalMapper->setMapping(_action_connection_help, conf()->get_value("www/help_connection").c_str()); openUrlSignalMapper->setMapping(_action_rvh_faq, conf()->get_value("www/help_faq").c_str()); connect(_action_rvr_wwwsite, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(_action_rvr_1vs1, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(_action_rvr_player_profiles, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(_action_routerfw_help, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(_action_connection_help, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(_action_rvh_faq, SIGNAL(triggered()), openUrlSignalMapper, SLOT(map())); connect(openUrlSignalMapper, SIGNAL(mapped(QString)), this, SLOT(open_url(QString))); }
/*------------------------------------------------------------------------ * MultiMX room has been added to the roster. * * @param session The MXit session object * @param contact The MultiMX room's contact information */ void multimx_created(struct MXitSession* session, struct contact* contact) { PurpleConnection *gc = session->con; struct multimx* multimx = NULL; purple_debug_info(MXIT_PLUGIN_ID, "Groupchat '%s' created as '%s'\n", contact->alias, contact->username); /* Find matching MultiMX group */ multimx = find_room_by_username(session, contact->username); if (multimx == NULL) { multimx = room_create(session, contact->username, contact->alias, TRUE); } else if (multimx->state == STATE_INVITED) { /* After successfully accepting an invitation */ multimx->state = STATE_JOINED; } /* Call libpurple - will trigger 'mxit_chat_join' */ serv_got_joined_chat(gc, multimx->chatid, multimx->roomname); /* Send ".list" command to GroupChat server to retrieve current member-list */ mxit_send_message(session, multimx->roomid, ".list", FALSE, FALSE); }
void process_client() { char *argv[MAX_ARGV]; char buf[BUF_SIZE]; int argc = 0; set_signal(); print_greeting(); prompt(); while (1) { if (!fgets(buf, BUF_SIZE, stdin)) break; strtok(buf, "\r\n"); // Skip everything after "\r" or "\n" parse_argv(buf, argv, &argc); // It it sommand, so let's parse it char *cmd = argv[0]; // At least 1 token exists if (buf[0] != '\\') // If not command, then client wants to say something { say(buf); } else if (!strcmp(cmd, "\\quit")) { break; } else if (!strcmp(cmd, "\\help")) { print_help(); } else if (!strcmp(cmd, "\\list") && argc == 1) { list(); } else if (!strcmp(cmd, "\\register") && argc == 3) { user_create(argv[1], argv[2]); // args: user, pass } else if (!strcmp(cmd, "\\login") && argc == 3) { user_login(argv[1], argv[2]); // args: user, pass } else if (!strcmp(cmd, "\\create") && argc >= 2 && argc <= 3) { room_create(argv[1], argv[2]); // args: name, [pass] } else if (!strcmp(cmd, "\\join") && argc >= 2 && argc <= 3) { room_join(argv[1], argv[2]); // args: name, [pass] } else if (!strcmp(cmd, "\\leave")) { room_leave(); } else { WriteLn("Unknown command or wrong number of arguments (type '\\help' for commands list)"); } WriteLn(""); prompt(); } }