defaultmessageresponder.java

来自「google公司的用Java写的一个聊天软件的原代码」· Java 代码 · 共 676 行 · 第 1/2 页

JAVA
676
字号
			wList.addWaitingUser( userCode );			controller.sendExposeMessage();			controller.sendGetTopicMessage();		}		else		{			try			{				NickDTO user = controller.getNick( userCode );				controller.changeAwayStatus( userCode, away, awayMsg );				if ( away )					msgController.showSystemMessage( user.getNick() + " went away: " + awayMsg );				else					msgController.showSystemMessage( user.getNick() + " came back" );				if ( user.getPrivchat() != null )				{					user.getPrivchat().setAway( away );					if ( away )						msgController.showPrivateSystemMessage( user, user.getNick() + " went away: " + user.getAwayMsg() );					else						msgController.showPrivateSystemMessage( user, user.getNick() + " came back" );				}			}			catch ( final CommandException e )			{				LOG.log( Level.SEVERE, "Something very strange going on here...\n" + e );			}		}	}	/**	 * Updates the idle time of the application user,	 * and checks if the ip address has changed.	 */	@Override	public void meIdle( final String ipAddress )	{		me.setLastIdle( System.currentTimeMillis() );		if ( !me.getIpAddress().equals( ipAddress ) )		{			msgController.showSystemMessage( "You changed ip from " + me.getIpAddress() + " to " + ipAddress );			me.setIpAddress( ipAddress );		}	}	/**	 * Updates the idle time of the user,	 * and checks if the user's ip address has changed.	 */	@Override	public void userIdle( final int userCode, final String ipAddress )	{		if ( controller.isNewUser( userCode ) )		{			wList.addWaitingUser( userCode );			controller.sendExposeMessage();			controller.sendGetTopicMessage();		}		else		{			NickDTO user = controller.getNick( userCode );			user.setLastIdle( System.currentTimeMillis() );			if ( !user.getIpAddress().equals( ipAddress ) )			{				msgController.showSystemMessage( user.getNick() + " changed ip from " + user.getIpAddress() + " to " + ipAddress );				user.setIpAddress( ipAddress );			}		}	}	/**	 * Sends the current topic.	 */	@Override	public void topicRequested()	{		controller.sendTopicMessage();	}	/**	 * Someone sent a message that the application user's nick is	 * in use, so the nick is reset.	 */	@Override	public void nickCrash()	{		controller.changeNick( me.getCode(), "" + me.getCode() );		msgController.showSystemMessage( "Nick crash, resetting nick to " + me.getNick() );		ui.showTopic();	}	/**	 * Sends information about this client to the other clients.	 */	@Override	public void exposeRequested()	{		controller.sendExposingMessage();		controller.sendClientInfo();	}	/**	 * Changes the nick of a user, if valid.	 */	@Override	public void nickChanged( final int userCode, final String newNick )	{		if ( controller.isNewUser( userCode ) )		{			wList.addWaitingUser( userCode );			controller.sendExposeMessage();			controller.sendGetTopicMessage();		}		else		{			NickDTO user = controller.getNick( userCode );			if ( !controller.isNickInUse( newNick ) && Tools.isValidNick( newNick ) )			{				String oldNick = user.getNick();				controller.changeNick( userCode, newNick );				msgController.showSystemMessage( oldNick + " changed nick to " + newNick );				if ( user.getPrivchat() != null )				{					msgController.showPrivateSystemMessage( user, oldNick + " changed nick to " + user.getNick() );					user.getPrivchat().updateNick();				}			}			else			{				LOG.log( Level.SEVERE, user.getNick() + " tried to change nick to '" + newNick + "', which is invalid" );			}		}	}	/**	 * Asks if the application user wants to receive a file from another user,	 * and if so, starts a server listening for a file transfer.	 *	 * If the user does not exist in the user list, it's asked to identify	 * itself first.	 */	@Override	public void fileSend( final int userCode, final long byteSize, final String fileName, final String user, final int fileHash, final int fileCode )	{		if ( controller.isNewUser( userCode ) )		{			wList.addWaitingUser( userCode );			controller.sendExposeMessage();			controller.sendGetTopicMessage();		}		new Thread( "DefaultMessageResponderFileSend" )		{			public void run()			{				int counter = 0;				while ( wList.isWaitingUser( userCode ) && counter < 40 )				{					counter++;					try					{						sleep( 50 );					}					catch ( final InterruptedException e )					{						LOG.log( Level.SEVERE, e.toString(), e );					}				}				if ( !controller.isNewUser( userCode ) )				{					String size = Tools.byteToString( byteSize );					msgController.showSystemMessage( user + " is trying to send the file " + fileName + " [" + size + "]" );					if ( ui.askFileSave( user, fileName, size ) )					{						File file = ui.showFileSave( fileName );						if ( file != null )						{							NickDTO tempnick = controller.getNick( userCode );							FileReceiver fileRes = new FileReceiver( tempnick, file, byteSize );							tList.addFileReceiver( fileRes );							ui.showTransfer( fileRes );							try							{								int port = fileRes.startServer();								controller.sendFileAccept( userCode, port, fileHash, fileName );								if ( fileRes.transfer() )								{									msgController.showSystemMessage( "Successfully received " + fileName											+ " from " + user + ", and saved as " + file.getName() );								}								else								{									msgController.showSystemMessage( "Failed to receive " + fileName + " from " + user );									fileRes.cancel();								}							}							catch ( final ServerException e )							{								LOG.log( Level.SEVERE, e.toString(), e );								msgController.showSystemMessage( "Failed to receive " + fileName + " from " + user );								controller.sendFileAbort( userCode, fileHash, fileName );								fileRes.cancel();							}							finally							{								tList.removeFileReceiver( fileRes );							}						}						else						{							msgController.showSystemMessage( "You declined to receive " + fileName + " from " + user );							controller.sendFileAbort( userCode, fileHash, fileName );						}					}					else					{						msgController.showSystemMessage( "You declined to receive " + fileName + " from " + user );						controller.sendFileAbort( userCode, fileHash, fileName );					}				}				else				{					LOG.log( Level.SEVERE, "Could not find user: " + user );				}			}		} .start();	}	/**	 * The other user stopped a file transfer from the application user.	 * Updates the status in the file sender.	 */	@Override	public void fileSendAborted( final int userCode, final String fileName, final int fileHash )	{		NickDTO user = controller.getNick( userCode );		FileSender fileSend = tList.getFileSender( user, fileName, fileHash );		if ( fileSend != null )		{			fileSend.cancel();			msgController.showSystemMessage( user.getNick() + " aborted sending of " + fileName );			tList.removeFileSender( fileSend );		}	}	/**	 * The other user has accepted a file transfer. Will try to connect to the	 * user to send the file.	 */	@Override	public void fileSendAccepted( final int userCode, final String fileName, final int fileHash, final int port )	{		new Thread( "DefaultMessageResponderFileSendAccepted" )		{			public void run()			{				NickDTO user = controller.getNick( userCode );				FileSender fileSend = tList.getFileSender( user, fileName, fileHash );				if ( fileSend != null )				{					msgController.showSystemMessage( user.getNick() + " accepted sending of " + fileName );					// Give the server some time to set up the connection first					try					{						Thread.sleep( 200 );					}					catch ( final InterruptedException e )					{						LOG.log( Level.SEVERE, e.toString(), e );					}					if ( fileSend.transfer( port ) )					{						msgController.showSystemMessage( fileName + " successfully sent to " + user.getNick() );					}					else					{						msgController.showSystemMessage( "Failed to send " + fileName + " to " + user.getNick() );					}					tList.removeFileSender( fileSend );				}			}		} .start();	}	/**	 * Returns information about this client.	 */	@Override	public void clientInfo( final int userCode, final String client, final long timeSinceLogon, final String operatingSystem, final int privateChatPort )	{		NickDTO user = controller.getNick( userCode );		if ( user != null )		{			user.setClient( client );			user.setLogonTime( System.currentTimeMillis() - timeSinceLogon );			user.setOperatingSystem( operatingSystem );			user.setPrivateChatPort( privateChatPort );		}		else			LOG.log( Level.SEVERE, "Could not find user: " + userCode );	}}

⌨️ 快捷键说明

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