Esempio n. 1
0
		private void WhatToDoOnFail(DoubleQueueRequestData obj)
		{
			if (obj.IsHandled) return;

			Responser(obj, new WebServiceEventArgs(WebApiServerStatus.Error, new Exception(), String.Empty, obj.UserState));
		}
Esempio n. 2
0
		private void StartApiOperation(DoubleQueueRequestData arg1)
		{
			Executor(arg1);
		}
Esempio n. 3
0
		public override Guid InitiatePost(string url, WebServiceResult result, string writableString, object userState)
		{
			var guid = Guid.NewGuid();

			var requestItem = new DoubleQueueRequestData(guid, RequestType.Post, url, writableString, userState, result, _currentWorker);

			switch (_currentWorker)
			{
				case CurrentlyUsedWorker.Primary:
					_primaryWorker.EnqueueOperation(requestItem);
					_currentWorker = CurrentlyUsedWorker.Secondary;
					break;
				case CurrentlyUsedWorker.Secondary:
					_secondaryWorker.EnqueueOperation(requestItem);
					_currentWorker = CurrentlyUsedWorker.Primary;
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}

			return guid;
		}
Esempio n. 4
0
		private void Executor(DoubleQueueRequestData requestData)
		{
			Debug.Assert(requestData.Result != null);
			Debug.Assert(HasInternetConnectivity);

			if (requestData.RequestType == RequestType.Get)
			{
				CreateGetRequestWithState(requestData, GetResponseProcessorCallback);
			}
			else
			{
				CreatePostRequestWithState(requestData, StartPostRequestStreamCallback);
			}


		}
Esempio n. 5
0
		public override Guid InitiateGet(string url, WebServiceResult result, IDictionary<string, string> parameters, object userState)
		{
			var guid = Guid.NewGuid();

			var pars = Utils.ProcessArguments(parameters);
			var requestItem = new DoubleQueueRequestData(guid, RequestType.Get, url, pars, userState, result, _currentWorker);

			ThreadPool.QueueUserWorkItem(state =>
											 {
												 var item = (DoubleQueueRequestData)state;

												 switch (_currentWorker)
												 {
													 case CurrentlyUsedWorker.Primary:
														 _primaryWorker.EnqueueOperation(item);
														 _currentWorker = CurrentlyUsedWorker.Secondary;
														 break;
													 case CurrentlyUsedWorker.Secondary:
														 _secondaryWorker.EnqueueOperation(item);
														 _currentWorker = CurrentlyUsedWorker.Primary;
														 break;
													 default:
														 throw new ArgumentOutOfRangeException();
												 }
											 }, requestItem);
			return guid;
		}