1 21 package com.db4o.cs; 22 23 import com.db4o.cs.messages.*; 24 import com.db4o.foundation.*; 25 import com.db4o.foundation.network.*; 26 27 class YapClientThread extends Thread { 28 29 private YapClient i_stream; 30 private YapSocket i_socket; 31 final Queue4 messageQueue; 32 final Lock4 messageQueueLock; 33 34 35 YapClientThread(YapClient client, YapSocket a_socket, Queue4 messageQueue_, Lock4 messageQueueLock_){ 36 synchronized(this){ 37 i_stream = client; 38 messageQueue = messageQueue_; 39 i_socket = a_socket; 40 messageQueueLock = messageQueueLock_; 41 } 42 } 43 44 synchronized boolean isClosed(){ 45 return i_socket == null; 46 } 47 48 synchronized void close(){ 49 i_stream = null; 50 i_socket = null; 51 } 53 54 public void run() { 55 while(i_socket != null){ 56 try { 57 if(i_stream == null){ 58 return; 59 } 60 final Msg message; 61 try { 62 message=Msg.readMessage(i_stream.getTransaction(), i_socket); 63 } 64 catch(Exception exc) { 65 messageQueueLock.run(new Closure4() { 66 public Object run() { 67 messageQueue.add(Msg.ERROR); 68 close(); 69 messageQueueLock.awake(); 70 return null; 71 } 72 }); 73 74 close(); 75 return; 76 } 77 if(i_stream == null){ 78 return; 79 } 80 if(Msg.PING.equals(message)){ 81 i_stream.writeMsg(Msg.OK); 82 }else if(Msg.CLOSE.equals(message)){ 83 i_stream.logMsg(35, i_stream.toString()); 84 if(i_stream == null){ 85 return; 86 } 87 88 91 94 96 98 i_stream = null; 99 i_socket = null; 100 }else { 101 messageQueueLock.run(new Closure4() { 102 public Object run() { 103 messageQueue.add(message); 104 messageQueueLock.awake(); 105 return null; 106 } 107 }); 108 } 109 } catch (Exception exc) { 110 close(); 111 return; 112 } 113 } 114 } 115 } 116 | Popular Tags |