示例#1
0
        /// <summary>
        /// 用于测试一个程序是否是唯一实例,通过字符串进行限制。
        /// </summary>
        /// <param name="appId"></param>
        public static bool IsSingleton(string appId)
        {
            MemoryShare ms = new MemoryShare();

            ms.Init(appId);
            byte[] bts = new byte[ms.MaxLength];
            ms.Read(ref bts, 0, bts.Length);

            bool b = true;

            for (int i = 0; i < bts.Length; i++)
            {
                if (bts[i] > 0)
                {
                    b = false;
                    break;
                }
            }

            if (b)
            {
                for (int i = 0; i < bts.Length; i++)
                {
                    bts[i] = 1;
                }
                ms.Write(bts, 0, bts.Length);
            }

            return(b);
        }
示例#2
0
        public void Initialize()
        {
            var settings = EngineSettings.Default;

            settings.ActiveMode       = Settings.ActiveMode;
            settings.UseSparseFiles   = true;
            settings.AutoSelectPort   = true;
            settings.ReconnectTimeout = 45;

            if (Settings.TCPPort != 0)
            {
                settings.TcpPort = Settings.TCPPort;
            }

            if (Settings.UDPPort != 0)
            {
                settings.UdpPort = Settings.UDPPort;
            }

            _engine = new DcEngine(settings);
            _engine.TagInfo.Version = "livedc";

            _hubManager = new DcHubManager(this, _client);

            if (File.Exists(SharePath))
            {
                try
                {
                    _engine.Share = MemoryShare.CreateFromXml(SharePath);
                    _engine.Share.Reload();
                }
                catch (Exception x)
                {
                    logger.Error("Unable to load share from {0} because {1}", SharePath, x.Message);
                }
            }

            if (_engine.Share == null)
            {
                _engine.Share = new MemoryShare();
            }

            if (Settings.StorageAutoSelect)
            {
                _engine.Settings.PathDownload = StorageHelper.GetBestSaveDirectory();
            }
            else
            {
                _engine.Settings.PathDownload = Settings.StoragePath;
            }

            if (File.Exists(IncompletePath))
            {
                try
                {
                    _engine.DownloadManager.Load(IncompletePath);
                }
                catch (Exception x)
                {
                    logger.Error("Unable to load downloads {0}", x.Message);
                }
            }

            Settings.Nickname = "livedc" + Guid.NewGuid().ToString().GetMd5Hash().Substring(0, 8);

            _engine.ActiveStatusChanged += delegate { OnStatusChanged(); };

            _engine.StartAsync();
            _engine.Connect();

            if (!string.IsNullOrEmpty(Settings.PortCheckUrl))
            {
                LiveApi.PortCheckUri = Settings.PortCheckUrl;
            }

            ThreadPool.QueueUserWorkItem(o => AutoConfiguration());
        }