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

📄 talk.java

📁 有关java 的p2p应用,是一般很好的教程,有兴趣的朋友应该好好阅读一下
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                        }                    }                } catch(Exception e) {                    continue;                }                if (checkUserAdv(adv, name)) {                    return adv;                }            }        } catch (Exception e) {}        // Now, search remote        discovery.getRemoteAdvertisements(null,                                          DiscoveryService.ADV,                                          PipeAdvertisement.NameTag,                                          TalkNameTag + "." + name,                                          2,                                          this);        // Wait a bit in order to get an answer.        int i=0;        while (true) {            try {                if (i>MAXRETRIES) {                    println("");                    break;                }                Thread.sleep( WaitingTime);                print(".");                i++;                //one more query                if (i == MAXRETRIES/2) {                    discovery.getRemoteAdvertisements(null,                                                      DiscoveryService.ADV,                                                      PipeAdvertisement.NameTag,                                                      TalkNameTag + "." + name,                                                      2,                                                      this);                }            } catch (Exception e) {}            try {                synchronized(this) {                    if (results != null) {                        Iterator eachAdv = results.iterator();                        while( eachAdv.hasNext() ) {                            try {                                PipeAdvertisement adv = (PipeAdvertisement) eachAdv.next();                                if (checkUserAdv(adv, name)) {                                    return adv;                                }                            } catch(Exception e) {                                continue;                            }                        }                        results.clear();                    }                }            } catch (Exception e) {}        }        return null;    }    private void runDeamon(String name, PipeAdvertisement adv) {        userAdv = adv;        userName = name;        try {            pipeIn = getGroup().getPipeService().createInputPipe(userAdv);        } catch (Exception ex) {            printStackTrace( "Could not open InputPipe for " + userAdv.getPipeID(), ex );            return ;        }        if (pipeIn == null) {            consoleMessage( "Could not open InputPipe for " + userAdv.getPipeID() );            return;        }        thread = new Thread(this, "Talk:Talk Deamon for " + name +"@"+getGroup().getPeerGroupName() );        thread.setDaemon( true );        thread.start();        ShellObject daemon = new CleanupShellObject( "Talk Deamon for : " + name +"@"+getGroup().getPeerGroupName(), this );        // Store this object        env.add( EnvName + "." + name +"@"+getGroup().getPeerGroupName(), daemon );    }    /**     *  Stops the talk daemon thread     **/    private static class CleanupShellObject extends ShellObject {        CleanupShellObject( String name, Object object ) {            super( name, object );        }        /**         *  {@inheritDoc}         *         *  <p/>Closes the pipe if it is still open.         **/        protected void finalize() throws Throwable {            super.finalize();            talk daemon = (talk) getObject();            synchronized( daemon ) {                if( null != daemon.pipeIn ) {                    daemon.pipeIn.close();                }            }        }    }    private void stopDeamon(String name) {        // full name is required to find the object        String dname = EnvName + "." + name + "@" + getGroup().getPeerGroupName();        ShellObject obj = env.get(dname);        if (obj == null) {            // Notify user that the logout failed            consoleMessage( "Daemon(" + dname + ") for " + name + " not found");            return;        }        try {            talk daemon = (talk) obj.getObject();            env.remove(dname);            synchronized( daemon ) {                if( null != daemon.pipeIn ) {                    daemon.pipeIn.close();                }            }        } catch (Exception e) {            printStackTrace("Could not stop deamon for " + name, e);            return;        }    }    /**     *  {@inheritDoc}     **/    public void run() {        try {            // Listen on the pipe            while (true) {                Message msg = null;                try {                    msg = pipeIn.waitForMessage();                    if( null == msg ) {                        consoleMessage( "Stop listening for " + userName );                        break;                    }                } catch ( InterruptedException woken ) {                    Thread.interrupted();                    consoleMessage( "Stop listening for " + userName );                    return;                }                String senderName = null;                // Get sender information                MessageElement nameEl = msg.getMessageElement(SenderName);                if (nameEl != null) {                    senderName = nameEl.toString();                } else {                    println("received an unknown message");                    continue;                }                if( null == senderName ) {                    senderName = "Anonymous";                }                String senderMessage = null;                MessageElement msgEl = msg.getMessageElement(SenderMessage);                if (msgEl != null) {                    senderMessage = msgEl.toString();                } else {                    println("received an unknown message");                    continue;                }                senderMessage += handleImageFromMsg(senderName, msg);                // Get message                if (senderMessage == null) {                    consoleMessage( senderName + " to " + userName + "> [empty message]" );                    continue;                }                consoleMessage(senderName + " to "+ userName + "> "+senderMessage);            }        } catch( Throwable all ) {            printStackTrace( "Uncaught Throwable in thread :" + Thread.currentThread().getName(), all );        } finally {            synchronized( this ) {                pipeIn = null;                thread = null;            }        }    }    /**     * Generate uniquePipeID that is independantly unique within a group     *     * @return    The uniquePipeID value     */    private PipeAdvertisement getMyJxtaPipeAdv() {        byte [] preCookedPID = {                                   (byte) 0xD1, (byte) 0xD1, (byte) 0xD1, (byte) 0xD1,                                   (byte) 0xD1, (byte) 0xD1, (byte) 0xD1, (byte) 0xD1,                                   (byte) 0xD1, (byte) 0xD1, (byte) 0xD1, (byte) 0xD1,                                   (byte) 0xD1, (byte) 0xD1, (byte) 0xD1, (byte) 0xD1 };        PipeID id= (PipeID) IDFactory.newPipeID(getGroup().getPeerGroupID(), preCookedPID);        PipeAdvertisement pipeAdv = (PipeAdvertisement)                                    AdvertisementFactory.newAdvertisement(                                        PipeAdvertisement.getAdvertisementType());        pipeAdv.setPipeID(id);        pipeAdv.setName("JXME chat demo");        pipeAdv.setType(PipeService.PropagateType);        return pipeAdv;    }    private int syntaxError() {        consoleMessage( getDescription() );        println("Usage: talk -[r]egister <userName> [-[s]ecure | -[p]ropagate]");        println("       talk -[l]ogin <userName> ");        println("       talk -[lo]gout <userName> ");        println("       talk -[u] <senderName> <userName> ");        println("       talk -search || -f <userName>");        return ShellApp.appParamError;    }    /**     *  {@inheritDoc}     **/    public String getDescription() {        return "Talk to another peer";    }    /**     *  {@inheritDoc}     **/    public void help() {        println("NAME");        println("     talk - " + getDescription() );        println(" ");        println("SYNOPSIS");        println(" ");        println("    talk -[r]egister <userName> [-[s]ecure | -[p]ropagate]");        println("    talk -[l]ogin <userName> ");        println("    talk -[lo]gout <userName> ");        println("    talk -[u] <senderName> <userName> ");        println("    talk -search || -f");        println(" ");        println("DESCRIPTION");        println(" ");        println("The 'talk command implements a simple instant messaging command");        println("where two users on two remote peers can exchange messages.");        println("Messages are displayed on the Shell stdout. In order");        println("to use 'talk' the user needs to register himself. This is done");        println("via the following steps:");        println("Step 1: Register via 'talk -register <username>' command. This command");        println("        creates a Talk advertisement for that user. This has to");        println("        be done only once, the first time the user registers with");        println("        talk. The system remembers it accross reboot.");        println("        -secure can be added in order to establish a secure talk session.");        println("        -propagate can be added in order to establish a chatroom style talk session.");        println(" ");        println("Step 2: Login  via 'talk -login <username>' command. This command");        println("        logs the user and starts a listener daemon. This has to");        println("        to be done everytime the peer is restarted.");        println(" ");        println("Step 3: User can talk to another user via the command");        println("        'talk -u <myusername> <destusername>'. This command will prompt the user");        println("        to enter the message he/she wants to send");        println(" ");        println("         JXTA>talk -u moi mike");        println("         # talk : Connected to user mike");        println("         Type your message. To exit, type '.' at beginning of line");        println("  ");        println("To stop receiving any more talk messages. The user can stop the talk");        println("listener daemon by entering the command 'talk -logout <username>'");        println(" ");        println("OPTIONS");        println(" ");        println("    -register register a new user name.");        println("    -login    log user and set default user.");        println("    -logout   logout.");        println("    -search   search for talk users.");        println("    -u        specify current user name");        println(" ");        println("EXAMPLES");        println(" ");        println("      JXTA>talk -register me");        println("      JXTA>talk -login me");        println("      JXTA>talk -search");        println("      JXTA>talk -u me you");        println(" ");        println("This example shows how a new user 'me'  can register and log into talk,");        println(" an talk to the user 'you'. User 'you' needs to be registered and logged on.");        println(" ");        println("SEE ALSO");        println(" ");        println("    xfer sftp mkpipe");    }}

⌨️ 快捷键说明

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