001 
002 /**
003  * Title:        Advanced Network Client Sample<p>
004  * Description:  <p>
005  * Copyright:    Copyright (C) 2009 Alexey Veremenko<p>
006  * Company:      <p>
007  @author Alexey Veremenko
008  @version 1.0
009  */
010 package networking.client;
011 
012 import networking.*;
013 import networking.protocol.*;
014 import networking.client.frame.*;
015 
016 import java.util.*;
017 import java.io.*;
018 
019 /**
020  * ClientFileThread - this class represents a thread interacting with FileServer
021  * and client for transferring files
022  */
023 class ClientFileThread extends ClientThread
024 {
025     /**
026      * Master client
027      */
028     protected IFileClient m_master = null;
029 
030     /**
031      * File object
032      */
033     protected File m_file = null;
034 
035     /**
036      * File transfer object
037      */
038     private FileTransfer m_ftr = null;
039 
040     /**
041      * Construct new ClientThread object
042      @param file file
043      @param master IFileClient object
044      @param lister IFileTransferListener object
045      @param controller IFileTransferController object
046      */
047     public ClientFileThread(File file, IFileClient master,
048            IFileTransferListener listener,
049            IFileTransferController controller)
050     {
051         super(master);
052         m_master = master;
053         m_file = file;
054         // Setup file transfer object
055         m_ftr = new FileTransfer(m_file)
056         {
057             // Handle incomplete transfer
058             public void truncated()
059             {
060                 super.truncated();
061                 exit();
062             }
063 
064             // Handle abort
065             public void aborted()
066             {
067                 super.aborted();
068                 exit();
069             }
070         };
071         m_ftr.addListener(m_ftr);
072         m_ftr.addListener(listener);
073         m_ftr.setController(controller);
074     }
075 
076     /*
077      * Override ClientThread
078      */
079     protected void processMessage(Message msgthrows Exception
080     {
081         switch (msg.getType())
082         {
083             /* FileUploadServer messages */
084             case Message.ACCEPT_FILE:
085             {
086                 // Send file to server
087                 m_ftr.sendFile(getOut());
088                 // Report OK
089                 send(new Message(Message.FILE_UPLOAD_OK));
090                 log("File " + m_file.getAbsolutePath() " has been uploaded");
091                 exit();
092                 m_master.onSuccess();
093                 break;
094             }
095             case Message.REJECT_FILE:
096             {
097                 m_master.onReject(msg);
098                 break;
099             }
100 
101             /* FileDownloadServer messages */
102             case Message.FILE_DOWNLOAD_START:
103             {
104                 // Receive file from server
105                 m_ftr.recvFile(getIn(), msg.getLong());
106                 break;
107             }
108             case Message.FILE_DOWNLOAD_OK:
109             {
110                 // Report OK
111                 log("File " + m_file.getAbsolutePath() " has been downloaded");
112                 m_master.onSuccess();
113                 break;
114             }
115             case Message.FILE_DOWNLOAD_ERROR:
116             {
117                 // Report error
118                 throw new Exception(msg.getText());
119             }
120 
121             /* Master messages */
122             case Message.HI_FILE:
123             case Message.FILE_RECV:
124             {
125                 // Route message to server
126                 send(msg);
127                 break;
128             }
129             case Message.FILE_SENT:
130             {
131                 // Set file size
132                 msg.setLong(m_file.length());
133                 // Route message to server
134                 send(msg);
135                 break;
136             }
137 
138             /* Route other messages to parent */
139             default:
140             {
141                 super.processMessage(msg);
142                 break;
143             }
144         }
145     }
146 
147     /**
148      * Logging routine
149      @param s log message
150      */
151     protected void log(String s)
152     {
153         System.out.println(s);
154     }
155 
156     /*
157      * Override ClientThread
158      */
159     public void run()
160     {
161         super.run();
162         m_master.onDisconnect();
163     }
164 
165     /*
166      * Override ClientThread
167      */
168     protected void error(Exception e)
169     {
170         m_master.error(e);
171     }
172 }
Java2html