示例#1
0
		public int AddAccount(IAccount account)
		{
			int id = Interlocked.Increment(ref count);
			var newOne = new Account(id, account);

			if (string.IsNullOrEmpty(newOne.DomainName))
				throw new AccountsException(AccountsErrors.DomainRequred);

			if (accounts2.TryAdd(newOne.DomainName, newOne) == false)
				throw new AccountsException(AccountsErrors.DomainUsed);
			if (accounts1.TryAdd(id, newOne) == false)
				throw new AccountsException(AccountsErrors.IdUsed);

			try
			{
				files.IgnoryFileChanges(id);
				newOne.Serialize(files.GetFileName(id));
			}
			catch
			{
				accounts2.Remove(newOne.DomainName);
				accounts1.Remove(id);
				throw;
			}

			return id;
		}
示例#2
0
		public void UpdateAccount(IAccount account)
		{
			if (account.Id == Account.InvalidId)
				throw new AccountsException(AccountsErrors.InvalidId);

			var newOne = new Account(account);
			var oldOne = accounts1.GetValue(account.Id);

			if (oldOne == null)
				throw new AccountsException(AccountsErrors.OldNotFound);
			if (string.IsNullOrEmpty(newOne.DomainName))
				throw new AccountsException(AccountsErrors.DomainRequred);

			if (newOne.DomainName != oldOne.DomainName)
			{
				if (accounts2.TryAdd(newOne.DomainName, newOne) == false)
					throw new AccountsException(AccountsErrors.DomainUsed);
				accounts2.Remove(oldOne.DomainName);
			}

			files.IgnoryFileChanges(account.Id);
			newOne.Serialize(files.GetFileName(account.Id));
		}