//关闭窗口 private void button_close_Click(object sender, EventArgs e) { string send_message = "bye." + user_name[0];//发送离开聊天信息 foreach (Socket socket in socket_to_friend) { if (!socket.Connected) { continue; } P2P_Communication.Connect_Send(socket, send_message); Thread.Sleep(10); socket.Shutdown(SocketShutdown.Both); socket.Close(); } //FileStream source_stream = new FileStream(recordpath, FileMode.OpenOrCreate, FileAccess.Write); socket_to_server.Shutdown(SocketShutdown.Both); socket_to_server.Close(); //写入新的聊天记录 StreamWriter sw = new StreamWriter(recordpath, true); foreach (string msg in new_msg) { string new_msg = msg.Replace("\n", "."); sw.WriteLine(new_msg); } sw.Close(); this.Close(); }
//通过好友申请 private void button_approve_Click(object sender, EventArgs e) { string friend_name = label2.Text.Split(' ')[0]; Socket add_friend_socket = P2P_Communication.Commun_Friend(friend_name, client_socket); string send_msg = "aa." + user_name; P2P_Communication.Connect_Send(add_friend_socket, send_msg); Thread.Sleep(10); add_friend_socket.Shutdown(SocketShutdown.Both); add_friend_socket.Close(); label1.Hide(); label2.Hide(); button_approve.Hide(); button_refuse.Hide(); button_refuse.Enabled = false; button_approve.Enabled = false; if (friend_list == null) { friend_list = friend_name; } else { friend_list = friend_list + "." + friend_name; } string update_text = "update friend_table set friend_list = '" + user_name + "." + friend_list + "' where username="******"online"); listView1.Items.Add(new_item); }
//添加朋友 private void button_addfriend_Click(object sender, EventArgs e) { string friend_name = textBox_friendname.Text; bool state = true; //判断是否已经是好友 foreach (ListViewItem item in listView1.Items) { if (friend_name == item.Text) { MessageBox.Show(this, "已经在好友列表中", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); state = false; break; } } //判断是否存在该账号 if (state) { string recv_str = Server_Connection.Search_Friend(friend_name, client_socket); if (recv_str == "Incorrect No." || recv_str == "Please send the right message") { MessageBox.Show(this, "用户不存在", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { string search_text = "Select username from user_table where username="******"该用户还未注册", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (recv_str == "n") { MessageBox.Show(this, "该用户不在线,请稍后再试", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { Socket add_friend_socket = P2P_Communication.Commun_Friend(friend_name, client_socket); string send_msg = "a." + user_name; P2P_Communication.Connect_Send(add_friend_socket, send_msg); Thread.Sleep(10); add_friend_socket.Shutdown(SocketShutdown.Both); add_friend_socket.Close(); } } } }
//拒绝好友申请 private void button_refuse_Click(object sender, EventArgs e) { string friend_name = label2.Text.Split(' ')[0]; Socket add_friend_socket = P2P_Communication.Commun_Friend(friend_name, client_socket); string send_msg = "ar." + user_name; P2P_Communication.Connect_Send(add_friend_socket, send_msg); Thread.Sleep(10); add_friend_socket.Shutdown(SocketShutdown.Both); add_friend_socket.Close(); label1.Hide(); label2.Hide(); button_approve.Hide(); button_refuse.Hide(); button_refuse.Enabled = false; button_approve.Enabled = false; }
//发消息 private void button_send_Click(object sender, EventArgs e) { string send_message = null; if (send_state)//若为发消息 { send_message = "info." + user_name[0] + "."; } else//发文件之前先通知其他用户 { send_message = "file." + user_name[0] + "."; send_state = false; } string show_message = user_name[0] + " " + DateTime.Now.ToString() + "\n" + textBox1.Text + "\n"; string save_message = user_name[0] + "." + DateTime.Now.ToString() + "." + textBox1.Text; richTextBox1.SelectionAlignment = HorizontalAlignment.Left; richTextBox1.AppendText(show_message); new_msg.Add(save_message); for (int i = 0; i < chat_num; i++) { send_message = send_message + user_name[i + 1] + "."; } send_message = send_message + DateTime.Now.ToString() + "\n" + textBox1.Text + "\n"; for (int i = 0; i < chat_num; i++) { if (!socket_to_friend[i].Connected) { socket_to_friend[i] = P2P_Communication.Commun_Friend(user_name[i + 1], socket_to_server); P2P_Communication.Chat_Receive(socket_to_friend[i], this, true); } P2P_Communication.Connect_Send(socket_to_friend[i], send_message); } textBox1.Clear(); //socket_to_fri.Send(Encoding.ASCII.GetBytes(send_message)); }
//拒绝语音聊天 private void button_voicerefuse_Click(object sender, EventArgs e) { if (button_voicerefuse.Text == "拒绝") { string send_msg = "info." + user_name[0] + "." + DateTime.Now.ToString() + "\n" + "拒绝通话请求\n"; P2P_Communication.Connect_Send(socket_to_friend[0], send_msg); button_voicechat.Text = "音频"; button_voicerefuse.Hide(); } else { voice_state = false; //end_voice_chat(socket_to_friend[0]); thread_voice_chat.Abort(); string send_msg = "voiceend." + user_name[0] + "." + DateTime.Now.ToString() + "\n"; P2P_Communication.Connect_Send(socket_to_friend[0], send_msg); P2P_Communication.Chat_Receive(socket_to_friend[0], this, true); P2P_Communication.Chat_Receive(socket_to_friend[0], this, true); button_voicechat.Text = "音频"; button_voicerefuse.Hide(); label5.Hide(); } }
//发起语音聊天 private void button_voicechat_Click(object sender, EventArgs e) { //发起语音 if (button_voicechat.Text == "音频") { string send_msg = "voice." + user_name[0] + "." + DateTime.Now.ToString() + "\n"; P2P_Communication.Connect_Send(socket_to_friend[0], send_msg); } //接听 else { string send_msg = "voiceaccept." + user_name[0] + "." + DateTime.Now.ToString() + "\n"; P2P_Communication.Connect_Send(socket_to_friend[0], send_msg); label5.Show(); button_voicerefuse.Text = "挂断"; //voice_socket = P2P_Communication.Commun_Friend(user_name[1], socket_to_server); //thread_voice_chat = new Thread(() => start_voice_chat(voice_socket)); //voice_socket = P2P_Communication.Commun_Friend(user_name[1], socket_to_server); thread_voice_chat = new Thread(() => start_voice_chat(socket_to_friend[0])); thread_voice_chat.SetApartmentState(System.Threading.ApartmentState.STA);//单线程监听控制 thread_voice_chat.IsBackground = true; thread_voice_chat.Start(); } }
public Chat_Window(List <string> recv_msg, List <Socket> s, int num, int con_num) { InitializeComponent(); connection = My_Database.Connect_Database(); socket_to_server = Server_Connection.Connect_Server(); user_name = recv_msg[0].Substring(5).Split('.').ToList(); List <string> unconnect_name = new List <string>(user_name); unconnect_name.RemoveAt(0); chat_num = num; datapath = ".\\data\\" + user_name[0] + "\\"; if (!Directory.Exists(datapath)) { Directory.CreateDirectory(datapath); } //读入聊天记录 recordpath = ".\\data\\" + user_name[0] + "\\"; for (int i = 0; i < chat_num; i++) { recordpath = recordpath + user_name[i + 1]; } recordpath = recordpath + ".txt"; StreamReader sr = new StreamReader(new FileStream(recordpath, FileMode.OpenOrCreate)); string exist_record; while ((exist_record = sr.ReadLine()) != null) { string[] record_split = exist_record.Split('.'); if (record_split.Length >= 3) { if (record_split[0] == user_name[0]) { richTextBox1.SelectionAlignment = HorizontalAlignment.Left; } else { richTextBox1.SelectionAlignment = HorizontalAlignment.Right; } string show_msg = record_split[0] + " " + record_split[1] + "\n" + record_split[2] + "\n"; richTextBox1.AppendText(show_msg); } else { richTextBox1.AppendText(exist_record); } } sr.Close(); //如果为接收消息方 显示消息 for (int i = 0; i < recv_msg.Count(); i++) { string[] info = recv_msg[i].Split('.'); if (info[0] == "info") { //string recv_msg = fri_name + recv_str.Split('.')[2]; string show_msg = info[2] + " " + info[info.Length - 1]; richTextBox1.SelectionAlignment = HorizontalAlignment.Right; richTextBox1.AppendText(show_msg); new_msg.Add(show_msg); if (i == 0) { unconnect_name.Remove(info[2]); user_name.RemoveAt(user_name.Count() - 1); } } } if (s.Count() != 0) { socket_to_friend = s; //已连接用户 for (int j = 0; j < con_num; j++) { string send_message = "onchat." + user_name[0]; P2P_Communication.Connect_Send(socket_to_friend[j], send_message); } for (int i = con_num; i < chat_num; i++) { socket_to_friend.Add(P2P_Communication.Commun_Friend(unconnect_name[i - con_num], socket_to_server)); string send_message = "chat."; for (int j = 0; j <= chat_num; j++) { send_message = send_message + user_name[j] + "."; } P2P_Communication.Connect_Send(socket_to_friend[i], send_message); } } else { for (int i = con_num; i < chat_num; i++) { socket_to_friend.Add(P2P_Communication.Commun_Friend(unconnect_name[i - con_num], socket_to_server)); string send_message = "chat."; for (int j = 0; j <= chat_num; j++) { send_message = send_message + user_name[j] + "."; } P2P_Communication.Connect_Send(socket_to_friend[i], send_message); } } //开始接受消息 for (int i = 0; i < chat_num; i++) { P2P_Communication.Chat_Receive(socket_to_friend[i], this, true); } //控件初始化 //如果为群聊 if (chat_num > 1) { textBox_name.Text = findGroup(user_name); } string others = null; for (int i = 0; i < chat_num; i++) { others = others + user_name[i + 1] + "\n"; } label3.Text = user_name[0]; label4.Text = others; label5.Hide(); button_fileaccept.Hide(); button_filerefuse.Hide(); button_voicerefuse.Hide(); if (chat_num > 1) { button_voicechat.Enabled = false; } waveProvider = new BufferedWaveProvider(new WaveFormat(8000, 16, WaveIn.GetCapabilities(0).Channels)); recievedStream = new WaveOut(); recievedStream.Init(waveProvider); }