PageRenderTime 52ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/org/nutz/lang/socket/SocketMain.java

http://nutz.googlecode.com/
Java | 91 lines | 61 code | 19 blank | 11 comment | 3 complexity | e5c8cbe7ab14f99ec8ac798e63aeed3e MD5 | raw file
Possible License(s): Apache-2.0
  1. package org.nutz.lang.socket;
  2. import java.io.IOException;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import java.util.List;
  6. import java.util.concurrent.ExecutorService;
  7. import org.nutz.lang.Lang;
  8. import org.nutz.log.Log;
  9. import org.nutz.log.Logs;
  10. import org.nutz.trans.Atom;
  11. /**
  12. * 启动 Socket 的主监听历程
  13. *
  14. * @author zozoh(zozohtnt@gmail.com)
  15. */
  16. public class SocketMain implements Atom {
  17. private static final Log log = Logs.get();
  18. private SocketLock lock;
  19. private ServerSocket server;
  20. private ExecutorService service;
  21. private SocketActionTable saTable;
  22. private boolean accepted;
  23. private List<SocketAtom> atoms;
  24. public SocketMain( List<SocketAtom> atoms,
  25. SocketLock lock,
  26. ServerSocket server,
  27. ExecutorService service,
  28. SocketActionTable saTable) {
  29. this.atoms = atoms;
  30. this.lock = lock;
  31. this.server = server;
  32. this.service = service;
  33. this.saTable = saTable;
  34. }
  35. public void run() {
  36. // 等待得到套接层
  37. Socket socket;
  38. try {
  39. socket = server.accept();
  40. }
  41. // 网络通信问题,整个监听
  42. // TODO 值得商讨
  43. catch (IOException e) {
  44. //lock.setStop();
  45. throw Lang.wrapThrow(e);
  46. }
  47. // 设置标志位,让主程序知道自己已经开始工作了
  48. finally {
  49. if (log.isDebugEnabled())
  50. log.debug("Socket is accepted");
  51. accepted = true;
  52. }
  53. // 执行交互操作
  54. if (log.isDebugEnabled())
  55. log.debug("run action in a new thread");
  56. service.execute(createSocketAtom(atoms, lock, socket, saTable));
  57. if (log.isDebugEnabled())
  58. log.debugf("done for my job [%s], notify the lock", accepted);
  59. synchronized (lock) {
  60. lock.notify();
  61. }
  62. }
  63. public boolean isAccepted() {
  64. return accepted;
  65. }
  66. public boolean isStop() {
  67. return lock.isStop();
  68. }
  69. protected SocketAtom createSocketAtom(List<SocketAtom> atoms, SocketLock lock, Socket socket, SocketActionTable saTable) {
  70. return new SocketAtom(atoms, lock, socket, saTable);
  71. }
  72. }