void send_chan(puser users, pchan chans, char * buffer, int sender_fd, int option) { char * message = malloc(MAXLEN); int k = 0; int fd = -1; // Search for the user's channel int chan_nb = users[search_fd(users, sender_fd)].chan; if (option == 1) { // Option = 1 if user sent message, and 0 if it is the server // Get the sender's id to have his nickname when formatting int u = search_fd(users, sender_fd); // Format the message sprintf(message, "{%s} : %s", users[u].nick, buffer); } else { sprintf(message, "%s",buffer); } // Send to all users of the channel while (k < BACKLOG) { fd = chans[chan_nb].members[k]; if (fd != -1 && fd != sender_fd) { do_write(fd, message); } k++; } free(message); }
void chat_one(MES mes) { //私聊转发消息 int fd; fd = search_fd(mes.to); if(fd == 0) { fd = search_fd(mes.from); mes.resault = -1; } if(send(fd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } if(mes.resault != -1) { add_one_message(mes); } //puts("保存一条记录"); }
void send_bc(puser users, char * buffer, int fd) { int k = 0; int user_id = search_fd(users, fd); char * msg = malloc(MAXLEN); memset(msg, '0', MAXLEN); sscanf(buffer, "/msgall %250[^\n]", msg); sprintf(buffer, "%s : %s \n", users[user_id].nick, msg); for (k = 0; k < BACKLOG; k++) { if (users[k].sock_nb != fd && users[k].sock_nb != -1) do_write(users[k].sock_nb, buffer); } free(msg); }
void send_user(puser users, char * buffer, int sender) { char * temp = malloc(MAXLEN); // Extracting the expected reciever's nickname from the buffer sscanf(buffer, "/msg %s", temp); // Search for the reciever's id by its name and search for the sender's id by its socket int r = search_name(users, temp); int s = search_fd(users, sender); if (r == -1) { sprintf(buffer, "[Server] : %s is not a logged on user \n", temp); do_write(sender, buffer); return; } // Extract the message from the buffer, we use a regex to have the spaces included in the message sscanf(buffer, "/msg %*s %250[^\n]", temp); // Format the message to be sent sprintf(buffer, "[%s] : %s\n", users[s].nick, temp); // Finally send the message to the user do_write(users[r].sock_nb, buffer); // free(temp); }
void chat_group(MES mes) { char sql[255]; int res;//执行sql语句后的返回标志 MYSQL_RES *res_ptr;//指向查询结果的指针 MYSQL_FIELD *field;//字段结构指针 MYSQL_ROW result_row;//按行返回查询信息 int row,column;//查询返回的行数和列数 MYSQL *conn;//一个数据库链接 //初始化连接句柄 conn = mysql_init(NULL); if(conn == NULL) { //如果返回NULL说明初始化失败 printf("mysql_init failed!\n"); return;// EXIT_FAILURE; } conn = mysql_real_connect(conn,HOSTNAME,USER,PASS,DATABASE,0,NULL,0); if (!conn) { printf("Connection failed!\n"); } mysql_query(conn,"set names gbk"); //防止乱码。设置和数据库的编码一致就不会乱码 sprintf(sql,"SELECT * FROM group_%s;",mes.to); //puts(sql); res = mysql_query(conn,sql);//正确返回0 if(res) { perror("my_query"); mysql_close(conn); exit(0); } else{ //把查询结果给res_ptr res_ptr = mysql_store_result(conn); if(res_ptr) { int ro; ro = mysql_num_rows(res_ptr); int i; for(i=1;i<ro+1;i++) { //将群消息发给每个人 result_row = mysql_fetch_row(res_ptr); //printf("打算发消息给%s\n",result_row[0]); int dd; if((dd=search_fd(result_row[0])) == 0) { continue; } if(search_fd(result_row[0]) == search_fd(mes.from)) { continue; } if(send(dd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } //printf("已经发消息给%s\n",result_row[0]); } add_group_message(mes); //puts("添加一条群聊记录!"); } } mysql_close(conn); }