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 + -
显示快捷键?