KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > cs > YapClientBlobThread


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

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 YapClientBlobThread extends Thread JavaDoc{
28     private YapClient stream;
29     private Queue4 queue = new Queue4();
30     private boolean terminated = false;
31     
32     YapClientBlobThread(YapClient aStream){
33         stream = aStream;
34         setPriority(MIN_PRIORITY);
35     }
36     
37     void add(MsgBlob msg){
38         synchronized(queue){
39             queue.add(msg);
40         }
41     }
42     
43     synchronized boolean isTerminated(){
44         return terminated;
45     }
46     
47     public void run(){
48         try{
49             YapSocket socket = stream.createParalellSocket();
50             
51             MsgBlob msg = null;
52             
53             // no blobLock synchronisation here, since our first msg is valid
54
synchronized(queue){
55                 msg = (MsgBlob)queue.next();
56             }
57             
58             while(msg != null){
59                 msg.write(stream, socket);
60                 msg.processClient(socket);
61                 synchronized(stream.blobLock){
62                     synchronized(queue){
63                         msg = (MsgBlob)queue.next();
64                     }
65                     if(msg == null){
66                         terminated = true;
67                         Msg.CLOSE.write(stream, socket);
68                         try{
69                             socket.close();
70                         }catch(Exception JavaDoc e){
71                         }
72                     }
73                 }
74             }
75         }catch(Exception JavaDoc e){
76             e.printStackTrace();
77         }
78     }
79     
80 }
81
Popular Tags