⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jicq.java

📁 用java做的icq,不错的啊!大家看看啊!
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.String;
import java.awt.image.*;
import java.applet.*;
import sun.audio.*;

public class jICQ extends Applet
{
	static String icqNo="";
	static String ver="ver(c):1.4.0329";
	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){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;
			onlineMon=new Sender(onlineCmd);
			onlineMon.start();

			String cmd=null;
			if(jICQ.isApplet)cmd="GETME icqNo:"+myIcqID.icqNo+" port:"+UDPrPort;
			else {
				//int i=0;boolean ew=false;
				//while(i<40&&ew==false){Thread.sleep(100);if (rmsg.udpback)ew=true;}
				//cmd="GETME icqNo:"+myIcqID.icqNo+" port:"+rmsg.backport;
				cmd="GETME icqNo:"+myIcqID.icqNo+" port:"+UDPrPort;
			}
			sender=new Sender(cmd);
			sender.start();
			result=sender.getReturn();
			if(result.getCode()==200){}
			else {jICQ.exitSystem=true;exitMsg(result.getMsg());return;}
			toHash(friends);
			toID(onlineFriends);
			reSort();
			//begin to monitor message
		}catch(Exception e){System.out.println("  MainFrame run()-log error.\n");e.printStackTrace();}
		LOGED=true;
		repaint();

		try
		{
			//Result result=null;
			try{myIcqID=getID(myIcqID);myIcqID.isOnline=true;}catch(Exception e){}
			seek=new Seek(myIcqID);

			Dimension currentsize,pastsize;
			currentsize=pastsize=getSize();

			while(jICQ.exitSystem==false)
				try{
					currentsize=getSize();
					if(currentsize.height!=pastsize.height){repaintEvt=true;pastsize=getSize();}
					if(repaintEvt){reSort();repaint();repaintEvt=false;}
					if(!onlineMon.isAlive()){onlineMon=new Sender(onlineCmd);onlineMon.start();}
					if(duplogon){setVisible(false);exitMsg("别人正在用这个号码登录,请保护好你的密码。");}
					checkID();
					Thread.sleep(100);
				}catch(Exception e){System.out.println("  MainFrame.run() error:"+e);}	//end while
		}catch(Exception e){System.out.println("  MainFrame run() error:"+e);e.printStackTrace();}
	}
	public void paint(Graphics g)
	{
		if(!LOGED)return;
		try
		{
			setBackground(new Color(sysinfo.backgroundcolor));
			setForeground(new Color(sysinfo.textcolor));
			sysinfo.xposition=this.getLocationOnScreen().x;sysinfo.yposition=this.getLocationOnScreen().y;
			Dimension dm=getSize();
			if(dm.width>250)setSize(250,dm.height);
			if(dm.height<175)setSize(dm.width,175);
			dm=getSize();
			int iconSize=34;
			if(sysinfo.bigIcon)iconSize=40;else iconSize=28;
			area=new int[20][4];
			for(int i=0;i<20;i++){area[i][0]=-1;area[i][1]=-1;area[i][2]=-1;area[i][3]=-1;}
			
			int left=5,right=5;
			int realwidth=dm.width-left-right;
			area[0][0]=left;area[0][1]=23;area[0][2]=area[0][0]+realwidth/4;area[0][3]=40;		                    //
			area[1][0]=area[0][2]+1;area[1][1]=area[0][1];area[1][2]=area[1][0]+realwidth/4;area[1][3]=area[0][3];		//
			area[2][0]=area[1][2]+1;area[2][1]=area[0][1];area[2][2]=area[2][0]+realwidth/4;area[2][3]=area[0][3];		//
			area[3][0]=area[2][2]+1;area[3][1]=area[0][1];area[3][2]=area[3][0]+realwidth/4;area[3][3]=area[0][3];		    //
			
			area[4][0]=left;area[4][1]=area[3][3]+1;area[4][2]=area[4][0]+realwidth;area[4][3]=dm.height-70-20;		//head img	
			
			area[5][0]=left+realwidth/2+1;area[5][1]=area[4][3]+1;area[5][2]=area[5][0]+realwidth/4;area[5][3]=dm.height-70;		//up
			area[6][0]=area[5][2]+1;area[6][1]=area[4][3]+1;area[6][2]=area[6][0]+realwidth/4;area[6][3]=dm.height-70;		//down
			
			area[7][0]=left;area[7][1]=area[6][3]+4;area[7][2]=area[7][0]+realwidth;area[7][3]=area[7][1]+20;		//add friend
			
			area[8][0]=left;area[8][1]=area[7][3]+1;area[8][2]=area[8][0]+realwidth/2;area[8][3]=area[8][1]+20;		//message
			area[9][0]=area[8][2]+1;area[9][1]=area[7][3]+1;area[9][2]=area[9][0]+realwidth/2;area[9][3]=area[9][1]+20;		//modify
			
			area[10][0]=left;area[10][1]=area[9][3]+1;area[10][2]=area[10][0]+realwidth;area[10][3]=dm.height-5;			//ver
			
			//begin to draw image and text
			if(!jICQ.isApplet){Image backImg=sysinfo.getBackImage(getToolkit());if(backImg!=null)g.drawImage(backImg,0,0,dm.width,dm.height,this);}
			
			g.drawImage(jICQ.m0Image,area[0][0]+(area[0][2]-area[0][0])/2-8,area[0][3]-16,16,16,this);
			g.drawImage(jICQ.m1Image,area[1][0]+(area[1][2]-area[1][0])/2-8,area[1][3]-16,16,16,this);
			g.drawImage(jICQ.m2Image,area[2][0]+(area[2][2]-area[2][0])/2-8,area[2][3]-16,16,16,this);
			g.drawImage(jICQ.m3Image,area[3][0]+(area[3][2]-area[3][0])/2-8,area[3][3]-16,16,16,this);
			
			//g.drawImage(jICQ.head[Integer.parseInt(myIcqID.picNo)][1],left+2,area[4][3]+2,18,18,this);

			g.drawImage(jICQ.upImage,area[5][0]+(area[5][2]-area[5][0])/2-8,area[5][3]-17,16,16,this);
			g.drawImage(jICQ.downImage,area[6][0]+(area[6][2]-area[6][0])/2-8,area[6][3]-17,16,16,this);

			g.drawImage(jICQ.addImage,area[7][0]+(area[7][2]-area[7][0])/2+28,area[7][1]+2,16,16,this);
			g.drawString("添加好友",area[7][0]+(area[7][2]-area[7][0])/2-24,area[7][3]-5);

			int msgAll=message.size();
			Color c=null;
			String msgcount=new Integer(msgAll).toString()+" 消息";
			if(msgAll>0){
				c=g.getColor();
				g.setColor(Color.gray);
				g.drawString(msgcount,area[8][0]+(area[8][2]-area[8][0])/2-15+2,area[8][3]-5+2);
				g.setColor(Color.red);
			}
			g.drawString(msgcount,area[8][0]+(area[8][2]-area[8][0])/2-15,area[8][3]-5);
			if(msgAll>0)g.setColor(c);

			g.drawString("修改",area[9][0]+(area[9][2]-area[9][0])/2-18,area[9][3]-5);
			g.drawImage(jICQ.modifyImage,area[9][0]+(area[9][2]-area[9][0])/2+5,area[9][1]+1,16,16,this);
			g.drawString("jICQ "+jICQ.ver,area[10][0]+(area[10][2]-area[10][0])/2-48,area[10][3]-5);
			g.drawImage(jICQ.logImage,area[10][0],area[10][1],area[10][2]-area[10][0],area[10][3]-area[10][1],this);

			int cell=(area[4][3]-area[4][1])/iconSize;
			Enumeration e=friend.keys();
			IcqID icqid=null;
			int offset=3;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -