예제 #1
0
파일: Kernel.cs 프로젝트: elnomade/hathi
 /// <summary>
 /// Event handler for preferences class if any property was changed.
 /// </summary>
 /// <param name="sender">sender</param>
 /// <param name="e">changed property arguments</param>
 internal void OnPropertyChanged(object sender, PropertyEventArgs e)
 {
     if (e.Key=="MaxDownloadRate")
     {
     float upRate=Preferences.GetFloat("MaxUploadRate");
     float downRate=(float)e.NewValue;
     if ((upRate*4.0F<downRate)&&(upRate<10))
     {
         e.NewValue = upRate*4.0F;
     }
     else
     {
         // do nothing
     }
     }
     if (e.Key=="MaxUploadRate")
     {
     float upRate=(float)e.NewValue;
     float downRate=Preferences.GetFloat("MaxDownloadRate");
     if ((upRate*4.0F<downRate)&&(upRate<10))
     {
         Preferences.SetProperty("MaxDownloadRate", upRate*4.0F, false);
     }
     else
     {
         // do nothing
     }
     }
     if (e.Key=="RemotePassword")
     {
     System.Security.Cryptography.MD5 crypto=System.Security.Cryptography.MD5.Create();
     byte [] c=null;
     string clearPass=(string)e.NewValue;
     c=new byte[clearPass.Length];
     for (int i=0; i < clearPass.Length; i++)
     {
         c[i]=System.Convert.ToByte(clearPass[i]);
     }
     byte[] res=crypto.ComputeHash(c);
     e.NewValue=CKernel.HashToString(res);
     }
     if (e.Key=="Language")
     {
     Globalization.Language = e.NewValue.ToString();
     }
     if (e.Key=="IPFilterEnabled")
     {
     bool enabled=(bool)e.NewValue;
     if (enabled)
     {
         IPFilter = new CIPFilter();
         IPFilter.LoadIPFilter(DllDirectory,"ipfilter.dat",128);
     }
     else
         IPFilter=null;
     }
     if (e.Key=="TCPPort")
     {
     m_PortChanged=true;
     if (e.NewValue!=e.OldValue)
     {
         CKernel.Listener.Stop();
         CKernel.Listener=new CListener((ushort)e.NewValue);
         CKernel.Listener.Start();
         CKernel.ServersList.ConnectToAnyServer();//first call disconnects
         CKernel.ServersList.ConnectToAnyServer();//secons call connects
     }
     }
     if (e.Key=="UDPPort")
     {
     if (e.NewValue!=e.OldValue)
     {
         CKernel.UDPListener.Close();
         CKernel.UDPListener=new CUDPListener();
     }
     }
     if (e.Key=="TempFolders")
     {
     ArrayList newFolders=new ArrayList((Array)e.NewValue);
     ArrayList oldFolders=new ArrayList((Array)e.OldValue);
     foreach (string oldfolder in (Array)e.OldValue)
     {
         if (!newFolders.Contains(oldfolder))
         {
             //remove files from folder
             CKernel.FilesList.RemoveIncompleteFolder(oldfolder);
         }
     }
     foreach (string newfolder in (Array)e.NewValue)
     {
         if (!oldFolders.Contains(newfolder))
         {
             //remove files from folderadd new temp folder
             CKernel.FilesList.AddNewIncompleteFolder(newfolder);
         }
     }
     }
     if (e.Key=="SharedFolders")
     {
     string sharedOld="";
     string sharedNew="";
     foreach (string oldfolder in (Array)e.OldValue)
     {
         sharedOld+=oldfolder;
     }
     foreach (string newfolder in (Array)e.NewValue)
     {
         sharedNew+=newfolder;
     }
     if (sharedOld!=sharedNew) CKernel.FilesList.RefreshSharedList();
     }
 }
예제 #2
0
파일: Kernel.cs 프로젝트: elnomade/hathi
 internal static void StartKernel()
 {
     FilesList.LoadSharedFiles();
     UDPListener.Start();
     Listener.Start();
     CLog.Log(Constants.Log.Notify, "INIT_KRN", Version);
     LastSearch=1;
     if (Preferences.GetBool("IPFilterEnabled"))
     {
     IPFilter=new CIPFilter();
     IPFilter.LoadIPFilter(DllDirectory,"ipfilter.dat",128);
     }
     else
     IPFilter=null;
     if (Preferences.GetBool("DownloadServerMet"))
     httpDownload.DownloadFile(Preferences.GetString("ServerMetUri"),"","server.met",false);
     else
     CKernel.ServersList.Load("",true);
     //currently for fun only, should be removed
     //httpDownload.GetInfo(@"http://hathi.sourceforge.net/Messages/TestVersions-pre5-test2.txt");
     // TODO: Version
     //Xml example :
     string[] myLog=new string[] {"version","log"};
     httpDownload.GetInfoXML(@"http://hathi.sourceforge.net/Messages/v1.00.xml?lang="+Globalization.Language,myLog,true);
     //if threaded = true, it returns "", else can be used later to get
     //CLog.Log(Constants.Log.Info,httpDownload.getReadInfoFromXML("log"));
     //
     if (Preferences.GetBool("AutoReconnect"))
     {
     ServersList.ConnectToAnyServer();
     }
 }