📄 jicq.java
字号:
package test.jicq;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.image.*;
import java.applet.*;
import sun.audio.*;
public class jICQ extends Applet //jICQ网络即时通信系统
{
static String icqNo = ""; //用户名
static String ver = "ver(c):1.4.0329";//jICQ版本号
static boolean logonOK = false, exitSystem = false;
static String URLstring = "jicq.vicp.net";
static String[] host =
{ "jicq.vicq.net", "javaicq.vicp.net", "jicq.ip88.net" };
static int CONTMAX = 300;
static boolean isApplet = false, isRunning = false;
static String codeBase = null;
static Image[][] head, alphaHead;
static Image upImage = null,
downImage = null,
addImage = null,
modifyImage = null;
static Image m0Image = null,
m1Image = null,
m2Image = null,
m3Image = null,
smsgImage = null,
dialogImage = null;
static Image mailImage = null,
icqImage = null,
logImage = null,
seekImage = null,
jicqImage = null;
static LogonFrame lf = null;
Thread mainFrame = null;//主线程
String state = "";
static AudioClip msgAC = null, sMsgAC = null;
static String msgAudioPath = "image/msg.au",
sMsgAudioPath = "image/smsg.au";
public jICQ()
{
}
public static void main(String args[])//主程序
{
/* Socket socket=null;
for(int i=0;i<host.length;i++){
//System.out.println(" host[i]:"+host[i]);
try{socket=new Socket(host[i],7802);}catch(Exception e){}
if(socket!=null){URLstring=host[i];i=host.length+1;}
}
*/
if (args.length > 0)
if (args[0] != null && !args[0].equals(""))
URLstring = args[0];
System.out.println("Starting jICQ...\nThe server is:" + URLstring);
jICQ j = new jICQ();
j.getDiskFile();//查找源文件
j.logon();//登录
}
private void logon()//登录
{
lf = new LogonFrame();//登录界面设计
while (!logonOK)
{
try
{
Thread.sleep(100);
}
catch (Exception e)
{
}
}
mainFrame = new Thread(new MainFrame(icqNo));
mainFrame.start();
logonOK = false; //if applet in brower refushed,then must relogon
}
public static void setID(String s)//发送ID号
{
icqNo = s;
logonOK = true;
}
public static String getver()//得到版本号
{
return ver;
}
public void init()//初始化
{
isApplet = true;
exitSystem = true;
state = "正在初始化...";
repaint();
codeBase = getDocumentBase().toString();
head = new Image[31][2];
alphaHead = new Image[31][2];
for (int i = 0; i <= 30; i++)
try
{
head[i][0] =
getImage(getDocumentBase(), "image/" + i + "-0.gif");
alphaHead[i][0] = alpha(head[i][0]);
head[i][1] =
getImage(getDocumentBase(), "image/" + i + "-1.gif");
alphaHead[i][1] = alpha(head[i][1]);
}
catch (Exception e)
{
System.out.println(" jICQ.init() read picture error:" + e);
}
upImage = getImage(getDocumentBase(), "image/up.gif");
downImage = getImage(getDocumentBase(), "image/down.gif");
mailImage = getImage(getDocumentBase(), "image/mail.gif");
icqImage = getImage(getDocumentBase(), "image/icq.gif");
logImage = getImage(getDocumentBase(), "image/log.gif");
seekImage = getImage(getDocumentBase(), "image/seek.jpg");
jicqImage = getImage(getDocumentBase(), "image/jicq.jpg");
addImage = getImage(getDocumentBase(), "image/add.gif");
modifyImage = getImage(getDocumentBase(), "image/modify.gif");
m0Image = getImage(getDocumentBase(), "image/m0.gif");
m1Image = getImage(getDocumentBase(), "image/m1.gif");
m2Image = getImage(getDocumentBase(), "image/m2.gif");
m3Image = getImage(getDocumentBase(), "image/m3.gif");
smsgImage = getImage(getDocumentBase(), "image/smsg.gif");
dialogImage = getImage(getDocumentBase(), "image/dialog.gif");
msgAC = getAudioClip(getDocumentBase(), msgAudioPath);
sMsgAC = getAudioClip(getDocumentBase(), sMsgAudioPath);
audioPlay(1);
}
public void start()
{
state = "运行中...";
repaint();
if (isRunning == false)
{
isRunning = true;
logon();
}
}
public void stop()
{
exitSystem = true;
state = "已退出。";
repaint();
}
public void destory()
{
stop();
}
private void getDiskFile()//查找源文件
{
head = new Image[31][2];
alphaHead = new Image[31][2];
Frame f = new Frame();
for (int i = 0; i <= 30; i++)
try
{
head[i][0] = f.getToolkit().getImage("image/" + i + "-0.gif");
alphaHead[i][0] = alpha(head[i][0]);
head[i][1] = f.getToolkit().getImage("image/" + i + "-1.gif");
alphaHead[i][1] = alpha(head[i][1]);
}
catch (Exception e)
{
System.out.println(" jICQ.jICQ() read picture error:" + e);
}
try
{
upImage = f.getToolkit().getImage("image/up.gif");
downImage = f.getToolkit().getImage("image/down.gif");
mailImage = getToolkit().getImage("image/mail.gif");
icqImage = getToolkit().getImage("image/icq.gif");
logImage = getToolkit().getImage("image/log.gif");
seekImage = getToolkit().getImage("image/seek.jpg");
jicqImage = getToolkit().getImage("image/jicq.jpg");
addImage = getToolkit().getImage("image/add.gif");
modifyImage = getToolkit().getImage("image/modify.gif");
m0Image = getToolkit().getImage("image/m0.gif");
m1Image = getToolkit().getImage("image/m1.gif");
m2Image = getToolkit().getImage("image/m2.gif");
m3Image = getToolkit().getImage("image/m3.gif");
smsgImage = getToolkit().getImage("image/smsg.gif");
dialogImage = getToolkit().getImage("image/dialog.gif");
}
catch (Exception e)
{
System.out.println(
" MainFrame.MainFrame() read picture error:" + e);
}
}
public void paint(Graphics g)
{
getGraphics().drawImage(icqImage, 0, 0, this);
getGraphics().drawString(state, 50, 30);
}
private Image alpha(Image inImg)
{
Image outImg = null;
try
{
MediaTracker mt;
mt = new MediaTracker(this);
mt.addImage(inImg, 1);
mt.waitForID(1); // 等待所有图片的数据都被正确载入
if (inImg == null)
return null;
int imgw = inImg.getWidth(this);
int imgh = inImg.getHeight(this);
//System.out.println(" w,h="+imgw+","+imgh);
int deepHead[] = new int[imgw * imgh];
PixelGrabber pg =
new PixelGrabber(inImg, 0, 0, imgw, imgh, deepHead, 0, imgw);
pg.grabPixels();
int r, g, b, light = 80;
for (int i = 0; i < imgw * imgh; i++)
{
r = deepHead[i] >> 16 & 0xff;
r += light;
if (r > 0xff)
r = 0xff;
g = deepHead[i] >> 8 & 0xff;
g += light;
if (g > 0xff)
g = 0xff;
b = deepHead[i] & 0xff;
b += light;
if (b > 0xff)
b = 0xff;
deepHead[i] =
deepHead[i] & 0xff000000 | (r << 16) | (g << 8) | b;
} //把所有的象素的Alpha值
outImg =
createImage(
new MemoryImageSource(imgw, imgh, deepHead, 0, imgw));
//生成前景图象
mt.addImage(outImg, 2);
mt.waitForID(2);
}
catch (Exception e)
{
outImg = null;
}
return outImg;
}
public static void audioPlay(int mode)
{
String path = null;
try
{
//System.out.println(" is Applet:"+isApplet);
if (isApplet)
{
if (mode == 1)
msgAC.play();
if (mode == 2)
sMsgAC.play();
}
else
{
if (mode == 1)
path = msgAudioPath;
if (mode == 2)
path = sMsgAudioPath;
InputStream in = new FileInputStream(path);
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class MainFrame extends Frame implements Runnable//通信工具主界面
{
static Hashtable friend;
static boolean friendBusy = false;
static String friends = "", onlineFriends = "";
static boolean repaintEvt = false,
duplogon = false,
NEWMSG = false,
icqShowing = false;
static Vector message;
static IcqID myIcqID = null;
static int UDPrPort = 7900;
static long lastShowTime = 0;
static int[][] area;
static int currentarea = 0, pastarea = 0;
static String mis[] =
{
"收/发信息 R/S (F4)",
"删除此人 Delete",
"详细资料 Info",
"刷新 Refrush",
"-",
"大图标 Big icon",
"小图标 small icon",
"添加好友 Append" };
static String modifymis[] = { "修改个人资料 pID", "修改系统信息 sInfo" };
static boolean LOGED = false, canSend = false;
static HttpImage httpimage = null;
static SysInfo sysinfo = null;
static int menuItemIndex = 0;
DatagramSocket udpRSocket = null;
PopupMenu pm, modifyPM;
IcqID currenticqid = null;
String joinedIcqNo = null;
Result result = null;
Seek seek = null;
Sender sender = null;
Dialog dialog = null;
SubmitID submitid = null;
Dialog diaFrame = null;
Sender onlineMon = null;
MyDialog mydialog = null;
RMsg rmsg = null;
MainFrame(String icqNo)
{
try
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
enableEvents(AWTEvent.KEY_EVENT_MASK);
enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
repaintEvt = false;
duplogon = false;
NEWMSG = false;
icqShowing = false;
LOGED = false;
jICQ.exitSystem = false;
canSend = false;
myIcqID = new IcqID();
myIcqID.icqNo = icqNo;
message = new Vector();
friend = new Hashtable();
result = new Result();
sysinfo = new SysInfo();
setTitle(icqNo);
setIconImage(jICQ.icqImage);
buildPopupMenu();
setBounds(SysInfo.xposition, SysInfo.yposition, 100, 500);
httpimage = new HttpImage();
httpimage.start();
setVisible(true);
}
catch (Exception e)
{
System.out.println(" MainFrame.MainFrame() error:" + e);
close();
}
}
public void run()
{
System.out.println(" begin connect... ");
if (!jICQ.isApplet)
{
for (;(UDPrPort < 65535) && (udpRSocket == null); UDPrPort++)
try
{
udpRSocket = new DatagramSocket(UDPrPort);
}
catch (Exception e)
{
}
UDPrPort--;
if (udpRSocket == null)
{
jICQ.exitSystem = true;
exitMsg("不能建立UDP接收端口。");
return;
}
rmsg = new RMsg(udpRSocket, myIcqID);
rmsg.start();
}
String onlineCmd = null, onlineCmd2 = null;
try
{
String randomId = new Integer(new Random().nextInt()).toString();
onlineCmd = "ONLINEMON icqNo:" + myIcqID.icqNo + " id:" + randomId;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -