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

📄 demultiplexer.java

📁 JAVA网络编程技术内幕一书的源代码
💻 JAVA
字号:
/* * Java Network Programming, Second Edition * Merlin Hughes, Michael Shoffner, Derek Hamner * Manning Publications Company; ISBN 188477749X * * http://nitric.com/jnp/ * * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner; * all rights reserved; see license.txt for details. */import java.io.*;
import java.util.*;

public class Demultiplexer extends Thread {
  static private int plexerNumber;
  static private synchronized int nextPlexerNum () { return plexerNumber ++; }

  protected MultiplexInputStream multiplexIn;
  protected Hashtable targets;

  public Demultiplexer (MessageInput messageIn) {
    super ("Demultiplexer-" + nextPlexerNum ());
    multiplexIn = new MultiplexInputStream (messageIn);
    targets = new Hashtable ();
  }

  public void register (String label, MessageOutput messageOut) {
    targets.put (label, messageOut);
  }

  public void deregister (String label) {
    targets.remove (label);
  }

  protected boolean finished;
  
  public void finish () {
    finished = true;
    interrupt ();
  }

  public void run () {
    try {
      while (!interrupted ()) {
        multiplexIn.receive ();
        String label = multiplexIn.getLabel ();
        MessageOutput messageOut = (MessageOutput) targets.get (label);
        if (messageOut != null) {
          byte[] message = new byte[multiplexIn.available ()];
          multiplexIn.readFully (message);
          synchronized (messageOut) {
            messageOut.write (message);
            messageOut.send ();
          }
        }
      }
    } catch (IOException ex) {
      if (!finished)
        ex.printStackTrace ();
    }
  }
}

⌨️ 快捷键说明

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