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 msg) throws 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 }
|