Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Bill;
- import java.io.*;
- import Mail.MailHandler;
- public class User {
- private static String Account;
- private static String Passwd;
- private static String DirectoryStructure;
- private static boolean isLogin=false;
- private static String WorkingDirectory="/";
- public void setisLogin(boolean TorF){
- isLogin = TorF;
- }
- public void setAccount(String account){
- Account = account;
- }
- public void setPasswd(String pass){
- Passwd = pass;
- }
- public void setDirectory(String mydir){
- DirectoryStructure = mydir;
- }
- public boolean login(String myAccount, String myPasswd){
- //把seed server的內容抓進來account_server_table
- String [][]account_table = BillHandler.connect_seed_server();
- //把Account拿去做DHT,算出該Account的dir.xml放在哪一個account_server
- //account_server_number= 0或1或2,目前只能處理1(gmail)或2(hotmail)
- int account_number = BillHandler.deceived_DHT(myAccount);
- String server = "";
- if(account_number == 1)
- server = "imap.gmail.com"; //getContentOfSubject需要適當的server,所以需要此if-else。
- else if(account_number == 2)
- server = "pop3.live.com";
- else //account_server_number ==0
- server = "error";
- String dir_xml = MailHandler.getContentOfSubject(server,account_table[account_number][0],account_table[account_number][1],myAccount+"_dir.xml");
- if(dir_xml.equals("-1") ){
- System.out.println("帳號或密碼錯誤!");
- System.out.println("在account_server中找不到"+myAccount+"_dir.xml"+"的主旨");
- System.out.println("登入失敗");
- setisLogin(false);
- return false;
- }
- System.out.println("登入成功");
- setisLogin(true);
- setAccount(myAccount);
- setPasswd(myPasswd);
- setDirectory(dir_xml);
- return true;
- }
- public boolean register(String Wanted_Account , String Wanted_Passwd){
- /*檢查帳號有無重覆 ->把帳號拿去做DHT,得到一個account_server,
- * 看該account_server有沒有Wanted_Account_dir.xml這個檔案
- * 若已存在,傳回false
- * 若不存在,建立xml檔。方式:寄信到account_server ,主旨:Wanted_Account_dir.xml
- */
- System.out.println("*** in User.java's register ***");
- int account_server = BillHandler.deceived_DHT(Wanted_Account);
- if(account_server == 0){
- /*為dropbox
- *檢查 nctunusa2011@gmail.com的dropbox空間,有沒有Wanted_Account_dir.xml這個檔案
- */
- }
- else if(account_server == 1){
- /*為gmail
- *收信,看信件標題有沒有Wanted_Account_dir.xml這個檔案
- */
- int FoundMessage = -1;
- System.out.println("檢查有無主旨為\"" + Wanted_Account +"_dir.xml" +"\"的信件");
- FoundMessage = MailHandler.findSubject(
- MailHandler.Gmail_Imap_Server,
- MailHandler.Gmail_User_Account,
- MailHandler.Gmail_Password,
- Wanted_Account +"_dir.xml"
- );
- if(FoundMessage > -1){ //這個Wanted_Account有人用過了!
- System.out.println("有找到");
- return false;
- }
- System.out.println("沒找到。發送信件...");
- //建立空的dir.xml (寄一邽標題為Wanted_Account_dir.xml的信)
- String subject = Wanted_Account +"_dir.xml";
- String content = "";
- MailHandler.sendMail("nctunusa2011@gmail.com", subject, content);
- }
- else if(account_server == 2){
- /*為Hotmail
- *收信,看信件標題有沒有Wanted_Account_dir.xml這個檔案
- */
- int FoundMessage = -1;
- System.out.println("檢查有無主旨為\"" + Wanted_Account +"_dir.xml" +"\"的信件");
- FoundMessage = MailHandler.findSubject(
- MailHandler.Hotmail_Pop3_Server,
- MailHandler.Hotmail_User_Account,
- MailHandler.Hotmail_Password,
- Wanted_Account +"_dir.xml"
- );
- if(FoundMessage > -1){ //這個Wanted_Account有人用過了!
- System.out.println("有找到");
- return false;
- }
- System.out.println("沒找到。發送信件...");
- //建立空的dir.xml (寄一邽標題為Wanted_Account_dir.xml的信)
- String subject = Wanted_Account +"_dir.xml";
- String content = "";
- MailHandler.sendMail("nctunusa2011@hotmail.com", subject, content);
- }
- else{
- System.out.println("***** in register *****");
- System.out.println("出現例外");
- }
- System.out.println("註冊成功");
- return true;
- }
- public void giveInstruction(String command){
- if(command.startsWith("mkdir")){
- //建資料夾
- }else if(command.startsWith("cd")){
- //切換資料夾
- }else if(command.startsWith("upload")){
- //上傳
- upload("aa.txt",WorkingDirectory);
- }else if(command.startsWith("download")){
- //下載
- }else if(command.startsWith("delete")){
- //刪除
- }else if(command.startsWith("rename")){
- //更名
- }else if(command.startsWith("mov")){
- //移動
- }
- }
- public static boolean upload(String LocalPath,String RemotePath) {
- /*upload函數功能:把LocalPath(可能是相對或絕對路徑)描述的檔案上傳,
- * 上傳到RemotePath(使用者看到的雲端路徑)
- */
- //取得檔案絕對路徑,用於之後存取碎片的路徑
- File beingSplitFile = new File (LocalPath);
- String FileAbsolutePath = beingSplitFile.getAbsolutePath();
- //切割檔案
- int NumOfFrags = -1;
- //BillHandler.splitFile:假的splitFile,等曹文豪的函數。
- NumOfFrags = BillHandler.splitFile(LocalPath, "1MB");
- if(NumOfFrags == 0 || NumOfFrags == -1 ){
- System.out.println("切割檔案失敗");
- return false;
- }
- //進入碎片資料夾(Fragments Folder),取得裡面所有碎片名稱(All_Fragments_Name)
- File Fragments_Folder = new File (LocalPath + "_fragments_tmp");
- String[] All_Fragments_Name = Fragments_Folder.list();
- for(int i = 0; i < All_Fragments_Name.length; i++) {
- //取得每一個碎片的絕對路徑,以便上傳
- String Fragment_AbsolutePath = FileAbsolutePath + "_fragments_tmp" + "\\" + All_Fragments_Name[i];
- /*這裡的seperator是用Windows的『\』,不曉得unix-like的平台,會不會有問題。*/
- System.out.println("處理檔案:" + All_Fragments_Name[i]); //debug用。怕路徑出問題。
- //Fragment_Number:把『aa.txt_frag2』的"2"抓出來
- int Fragment_Number = Integer.parseInt(All_Fragments_Name[i].substring(All_Fragments_Name[i].length()-1));
- if( Fragment_Number %3 == 0 ){ //Dropbox
- System.out.println("上傳到dropbox");
- //把(account, Fragment_Number)加入記錄。
- }
- else if( Fragment_Number %3 == 1 ){ //Gmail
- System.out.println("上傳到Gmail(nctunusa2011@gmail.com)...");
- Gmail.upload(Fragment_AbsolutePath, "nctunusa2011@gmail.com");
- //把(nctunusa2011@gmail.com, Fragment_Number)加入記錄。
- }else{ //Hotmail
- System.out.println("上傳到Hotmail(nctunusa2011@hotmail.com)...");
- Hotmail.upload(Fragment_AbsolutePath, "nctunusa2011@hotmail.com");
- //把(nctunusa2011@hotmail.com, Fragment_Number)加入記錄。
- }
- }
- /*把『/vidio/aa.txt (kao,[0,1,5]),(huang,[2,3,4])』
- * 這筆碎片資訊,加到使用者的DirectoryStructure的最下面
- * 方式:刪掉信箱中使用者的dir_xml那封信,
- * 再重寄一封信上去。或許要寫個「refreshDirectoryStructure()」函數吧。
- */
- return true;
- }//upload
- }
Add Comment
Please, Sign In to add comment