📄 clientrecievemsg.java
字号:
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import javax.swing.border.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.DataSource;
public class ClientRecieveMsg extends Thread
{
String name = null;
BufferedReader in = null;
PrintWriter out = null;
Socket socket = null;
ClientFrame parent = null;
Style systemStyle = null;
boolean netMeetingRefuse = false;
boolean videoChatRefuse = false;
boolean audioChatRefuse = false;
String applicant;
public ClientRecieveMsg(ClientFrame p, String n, Socket s)
{
parent = p;
name = n;
socket = s;
systemStyle = parent.recordDoc.getStyle("xitong");
System.out.println(systemStyle);
try
{ // 实例化两个数据流
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch(IOException e)
{
System.out.println("Error:" + e);
parent.disconnect();
}
}
public void run()
{
String msg = null;
while(true)
{
try
{
msg = in.readLine();
} // 读取从服务器传来的信息
catch(IOException e)
{
System.out.println("Error:" + e);
parent.disconnect();
return;
}
StringTokenizer st = new StringTokenizer(msg, ":");
String head = st.nextToken();
System.out.println(msg);
if(head.equals("PEOPLE"))
{
parent.ChatFriends.removeAllElements();
parent.sendTo.removeAllItems();
while(st.hasMoreTokens())
{
StringTokenizer stt = new StringTokenizer(st.nextToken(), "|");
String name = stt.nextToken();
String ip = stt.nextToken();
People p = new People(name, ip);
parent.ChatFriends.add(p);
parent.sendTo.addItem(name);
}
parent.sendTo.addItem("所有人");
parent.sendTo.setSelectedItem("所有人");
}
else if(head.equals("MSG"))
{
parseMsg(st.nextToken());
}
else if(head.equals("QUIT"))
{
try
{
this.stop();
parent.listen = null;
parent.soc.close();
parent.soc = null;
parent.recordDoc.insertString(parent.recordDoc.getLength(), "这个名字已有人使用,请重新登陆!" + '\n', systemStyle);
}
catch(Exception e)
{
System.out.println("Error:" + e);
}
return;
}
else if(head.equals("NETMEETING_CONNECT"))
{
//st.nextToken();
applicant = st.nextToken();
new SCFrame(this, "NETMEETING_CONNECT",applicant);
}
else if(head.equals("NETMEETING_START"))
{
StringTokenizer peoplest = new StringTokenizer(st.nextToken(), "|");
int tokensCount = peoplest.countTokens();
String[] meetingPeople = new String[tokensCount];
for(int i = 0; i < tokensCount; i++)
{
meetingPeople[i] = peoplest.nextToken();
}
String[] sessions = new String[100];
String[] IPs = new String[100];
int k = 0;
int g = 0;
for(int j = 0; j < meetingPeople.length; j++)
{
String n = meetingPeople[j];
if(!n.equals(this.name))
{
String ip = parent.findIP(n);
IPs[g] = ip;
g++;
int port = 0;
for(int h = 0; h < parent.ChatFriends.size(); h++)
{
People p = (People)parent.ChatFriends.get(j);
if(p.name.equals(n))
{
port = 1000 * h + 1000;
break;
}
}
if(ip != null && port != 0)
{
sessions[k] = ip + "/" + port;
k++;
}
}
}
startTransmit(IPs);
startReceive(meetingPeople.length - 1, sessions);
//parent.netMeeting.notifyAll();
}
else if(head.equals("AUDIOCHAT_CONNECT"))
{
st.nextToken();
applicant = st.nextToken();
new SCFrame(this, "AUDIOCHAT_CONNECT", applicant);
}
else if(head.equals("AUDIOCHAT_CONNECT_REVERT"))
{
st.nextToken();
String feedBack = st.nextToken();
if(feedBack.equals("accept"))
{
String[] IPs = new String[1];
IPs[0] = parent.findIP((String)parent.sendTo.getSelectedItem());
String[] sessions = new String[1];
sessions[0] = IPs[0] + "/" + getOtherPort(applicant);
startTransmit(IPs);
startReceive(1, sessions);
}
else
{
JOptionPane.showMessageDialog(parent, "对方拒绝了你的请求!", "系统消息",
JOptionPane.INFORMATION_MESSAGE);
try
{
parent.recordDoc.insertString(parent.recordDoc.getLength(), "对方拒绝了你的请求!" + '\n', null);
}catch(Exception e){}
}
}
else if(head.equals("VIDEOCHAT_CONNECT"))
{
st.nextToken();
applicant = st.nextToken();
new SCFrame(this, "VIDEOCHAT_CONNECT", applicant);
}
else if(head.equals("VIDEOCHAT_CONNECT_REVERT"))
{
st.nextToken();
String feedBack = st.nextToken();
if(feedBack.equals("accept"))
{
String[] IPs = new String[1];
IPs[0] = parent.findIP((String)parent.sendTo.getSelectedItem());
String[] sessions = new String[1];
sessions[0] = IPs[0] + "/" + getOtherPort(applicant);
startTransmit(IPs);
startReceive(1, sessions);
}
else
{
JOptionPane.showMessageDialog(parent, "对方拒绝了你的请求!", "系统消息",
JOptionPane.INFORMATION_MESSAGE);
try
{
parent.recordDoc.insertString(parent.recordDoc.getLength(), "对方拒绝了你的请求!" + '\n', null);
}catch(Exception e){}
}
}
else if(head.equals("SYSTEM"))
{
try
{
String s = st.nextToken();
System.out.println(s);
parent.recordDoc.insertString(parent.recordDoc.getLength(), s + '\n', systemStyle);
}catch(Exception e){e.printStackTrace();}
}
}
}
private boolean findMyself(String[] ps)
{
for(int i = 0; i < ps.length; i++)
{
if(ps[i].equals(this.name))
{
return true;
}
}
return false;
}
private void parseMsg(String s)
{
try
{
StringTokenizer st = new StringTokenizer(s, "|");
String f = st.nextToken();
String recievetoName = st.nextToken();
String recievesendName = st.nextToken();
String recieveyear = st.nextToken();
String recievemonth = st.nextToken();
String recieveday = st.nextToken();
String recieveweekday = st.nextToken();
String recievehour = st.nextToken();
String recievetime = st.nextToken();
String recieveFont = st.nextToken();
int recieveFontSize = Integer.parseInt(st.nextToken());
int recieveColorRed = Integer.parseInt(st.nextToken());
int recieveColorGreen = Integer.parseInt(st.nextToken());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -