Guest User

Untitled

a guest
Oct 19th, 2018
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.24 KB | None | 0 0
  1. package Bill;
  2.  
  3. import java.io.*;
  4.  
  5. import Mail.MailHandler;
  6.  
  7. public class User {
  8. private static String Account;
  9. private static String Passwd;
  10. private static String DirectoryStructure;
  11. private static boolean isLogin=false;
  12. private static String WorkingDirectory="/";
  13.  
  14. public void setisLogin(boolean TorF){
  15. isLogin = TorF;
  16. }
  17. public void setAccount(String account){
  18. Account = account;
  19. }
  20. public void setPasswd(String pass){
  21. Passwd = pass;
  22. }
  23. public void setDirectory(String mydir){
  24. DirectoryStructure = mydir;
  25. }
  26. public boolean login(String myAccount, String myPasswd){
  27. //把seed server的內容抓進來account_server_table
  28. String [][]account_table = BillHandler.connect_seed_server();
  29.  
  30. //把Account拿去做DHT,算出該Account的dir.xml放在哪一個account_server
  31. //account_server_number= 0或1或2,目前只能處理1(gmail)或2(hotmail)
  32. int account_number = BillHandler.deceived_DHT(myAccount);
  33.  
  34. String server = "";
  35. if(account_number == 1)
  36. server = "imap.gmail.com"; //getContentOfSubject需要適當的server,所以需要此if-else。
  37. else if(account_number == 2)
  38. server = "pop3.live.com";
  39. else //account_server_number ==0
  40. server = "error";
  41.  
  42. String dir_xml = MailHandler.getContentOfSubject(server,account_table[account_number][0],account_table[account_number][1],myAccount+"_dir.xml");
  43.  
  44. if(dir_xml.equals("-1") ){
  45. System.out.println("帳號或密碼錯誤!");
  46. System.out.println("在account_server中找不到"+myAccount+"_dir.xml"+"的主旨");
  47. System.out.println("登入失敗");
  48. setisLogin(false);
  49. return false;
  50. }
  51. System.out.println("登入成功");
  52. setisLogin(true);
  53. setAccount(myAccount);
  54. setPasswd(myPasswd);
  55. setDirectory(dir_xml);
  56. return true;
  57. }
  58.  
  59.  
  60. public boolean register(String Wanted_Account , String Wanted_Passwd){
  61. /*檢查帳號有無重覆 ->把帳號拿去做DHT,得到一個account_server,
  62. * 看該account_server有沒有Wanted_Account_dir.xml這個檔案
  63. * 若已存在,傳回false
  64. * 若不存在,建立xml檔。方式:寄信到account_server ,主旨:Wanted_Account_dir.xml
  65. */
  66. System.out.println("*** in User.java's register ***");
  67. int account_server = BillHandler.deceived_DHT(Wanted_Account);
  68. if(account_server == 0){
  69. /*為dropbox
  70. *檢查 nctunusa2011@gmail.com的dropbox空間,有沒有Wanted_Account_dir.xml這個檔案
  71. */
  72. }
  73. else if(account_server == 1){
  74. /*為gmail
  75. *收信,看信件標題有沒有Wanted_Account_dir.xml這個檔案
  76. */
  77. int FoundMessage = -1;
  78.  
  79. System.out.println("檢查有無主旨為\"" + Wanted_Account +"_dir.xml" +"\"的信件");
  80. FoundMessage = MailHandler.findSubject(
  81. MailHandler.Gmail_Imap_Server,
  82. MailHandler.Gmail_User_Account,
  83. MailHandler.Gmail_Password,
  84. Wanted_Account +"_dir.xml"
  85. );
  86.  
  87. if(FoundMessage > -1){ //這個Wanted_Account有人用過了!
  88. System.out.println("有找到");
  89. return false;
  90. }
  91. System.out.println("沒找到。發送信件...");
  92. //建立空的dir.xml (寄一邽標題為Wanted_Account_dir.xml的信)
  93. String subject = Wanted_Account +"_dir.xml";
  94. String content = "";
  95. MailHandler.sendMail("nctunusa2011@gmail.com", subject, content);
  96. }
  97. else if(account_server == 2){
  98. /*為Hotmail
  99. *收信,看信件標題有沒有Wanted_Account_dir.xml這個檔案
  100. */
  101. int FoundMessage = -1;
  102. System.out.println("檢查有無主旨為\"" + Wanted_Account +"_dir.xml" +"\"的信件");
  103. FoundMessage = MailHandler.findSubject(
  104. MailHandler.Hotmail_Pop3_Server,
  105. MailHandler.Hotmail_User_Account,
  106. MailHandler.Hotmail_Password,
  107. Wanted_Account +"_dir.xml"
  108. );
  109.  
  110. if(FoundMessage > -1){ //這個Wanted_Account有人用過了!
  111. System.out.println("有找到");
  112. return false;
  113. }
  114. System.out.println("沒找到。發送信件...");
  115. //建立空的dir.xml (寄一邽標題為Wanted_Account_dir.xml的信)
  116. String subject = Wanted_Account +"_dir.xml";
  117. String content = "";
  118. MailHandler.sendMail("nctunusa2011@hotmail.com", subject, content);
  119. }
  120. else{
  121. System.out.println("***** in register *****");
  122. System.out.println("出現例外");
  123. }
  124. System.out.println("註冊成功");
  125. return true;
  126. }
  127.  
  128. public void giveInstruction(String command){
  129. if(command.startsWith("mkdir")){
  130. //建資料夾
  131. }else if(command.startsWith("cd")){
  132. //切換資料夾
  133. }else if(command.startsWith("upload")){
  134. //上傳
  135. upload("aa.txt",WorkingDirectory);
  136. }else if(command.startsWith("download")){
  137. //下載
  138. }else if(command.startsWith("delete")){
  139. //刪除
  140. }else if(command.startsWith("rename")){
  141. //更名
  142. }else if(command.startsWith("mov")){
  143. //移動
  144. }
  145.  
  146. }
  147. public static boolean upload(String LocalPath,String RemotePath) {
  148. /*upload函數功能:把LocalPath(可能是相對或絕對路徑)描述的檔案上傳,
  149. * 上傳到RemotePath(使用者看到的雲端路徑)
  150. */
  151.  
  152.  
  153. //取得檔案絕對路徑,用於之後存取碎片的路徑
  154. File beingSplitFile = new File (LocalPath);
  155. String FileAbsolutePath = beingSplitFile.getAbsolutePath();
  156.  
  157. //切割檔案
  158. int NumOfFrags = -1;
  159.  
  160. //BillHandler.splitFile:假的splitFile,等曹文豪的函數。
  161. NumOfFrags = BillHandler.splitFile(LocalPath, "1MB");
  162. if(NumOfFrags == 0 || NumOfFrags == -1 ){
  163. System.out.println("切割檔案失敗");
  164. return false;
  165. }
  166.  
  167. //進入碎片資料夾(Fragments Folder),取得裡面所有碎片名稱(All_Fragments_Name)
  168. File Fragments_Folder = new File (LocalPath + "_fragments_tmp");
  169. String[] All_Fragments_Name = Fragments_Folder.list();
  170.  
  171.  
  172.  
  173. for(int i = 0; i < All_Fragments_Name.length; i++) {
  174. //取得每一個碎片的絕對路徑,以便上傳
  175. String Fragment_AbsolutePath = FileAbsolutePath + "_fragments_tmp" + "\\" + All_Fragments_Name[i];
  176. /*這裡的seperator是用Windows的『\』,不曉得unix-like的平台,會不會有問題。*/
  177. System.out.println("處理檔案:" + All_Fragments_Name[i]); //debug用。怕路徑出問題。
  178.  
  179. //Fragment_Number:把『aa.txt_frag2』的"2"抓出來
  180. int Fragment_Number = Integer.parseInt(All_Fragments_Name[i].substring(All_Fragments_Name[i].length()-1));
  181. if( Fragment_Number %3 == 0 ){ //Dropbox
  182. System.out.println("上傳到dropbox");
  183. //把(account, Fragment_Number)加入記錄。
  184. }
  185. else if( Fragment_Number %3 == 1 ){ //Gmail
  186. System.out.println("上傳到Gmail(nctunusa2011@gmail.com)...");
  187. Gmail.upload(Fragment_AbsolutePath, "nctunusa2011@gmail.com");
  188. //把(nctunusa2011@gmail.com, Fragment_Number)加入記錄。
  189. }else{ //Hotmail
  190. System.out.println("上傳到Hotmail(nctunusa2011@hotmail.com)...");
  191. Hotmail.upload(Fragment_AbsolutePath, "nctunusa2011@hotmail.com");
  192. //把(nctunusa2011@hotmail.com, Fragment_Number)加入記錄。
  193. }
  194. }
  195. /*把『/vidio/aa.txt (kao,[0,1,5]),(huang,[2,3,4])』
  196. * 這筆碎片資訊,加到使用者的DirectoryStructure的最下面
  197. * 方式:刪掉信箱中使用者的dir_xml那封信,
  198. * 再重寄一封信上去。或許要寫個「refreshDirectoryStructure()」函數吧。
  199. */
  200.  
  201. return true;
  202. }//upload
  203. }
Add Comment
Please, Sign In to add comment