File: AsyncHandler.cs

package info (click to toggle)
mono 6.14.1%2Bds2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,282,732 kB
  • sloc: cs: 11,182,461; xml: 2,850,281; ansic: 699,123; cpp: 122,919; perl: 58,604; javascript: 30,841; asm: 21,845; makefile: 19,602; sh: 10,973; python: 4,772; pascal: 925; sql: 859; sed: 16; php: 1
file content (103 lines) | stat: -rw-r--r-- 2,606 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Threading;
using System.Web;

namespace TestMonoWeb {
	/// <summary>
	/// Summary description for AsyncHandler.
	/// </summary>
	public class AsyncHandler : IHttpAsyncHandler {
		private HttpContext _context;
		public bool IsReusable {
			get {
				//To enable pooling, return true here.
				//This keeps the handler in memory.
				return false;
			}
		}

		public IAsyncResult BeginProcessRequest(HttpContext context,    AsyncCallback cb, Object extraData) {
			AsynchOperation asynch = new AsynchOperation(cb, context, null);
			asynch.StartAsyncWork();

			context.Response.Write("AsyncHandler.BeginProcessRequest<br>\n");
			context.Response.Flush();

			//Signal the application that asynchronous 
			//processing is being performed. 
			SomeResult asynchForBegin = new SomeResult();

			//Processing is not synchronous.
			asynchForBegin.SetSynch(false);

			//Processing is not complete.
			asynchForBegin.SetCompleted(false);

			_context = context;

			return new SomeResult();
		}

		public void EndProcessRequest(IAsyncResult result) {
			_context.Response.Write("AsyncHandler.EndProcessRequest<br>\n");
		}

		//This method is required but is not called.
		public void ProcessRequest(HttpContext context) {
		}

	}//end class

	public class SomeResult : IAsyncResult {

		/*
		An instance of this class is returned to the application.
		This class lets the application know how the BeginEventHandler method has been handled. The application checks the CompletedSynchronously method.
		*/

		private bool _blnIsCompleted = false;
		private Mutex myMutex = null;
		private Object myAsynchStateObject = null;
		private bool _blnCompletedSynchronously = false;

		public void SetCompleted(bool blnTrueOrFalse) {
			_blnIsCompleted = blnTrueOrFalse;
		}

		public void SetSynch(bool blnTrueOrFalse) {
			_blnCompletedSynchronously = blnTrueOrFalse;
		}

		public bool IsCompleted {
			/*
			  This is not called by the application. However, set it to true. 
			*/
			get {
				return _blnIsCompleted;
			}
		}

		public WaitHandle AsyncWaitHandle {
			//The application does not call this method.         
			get {
				return myMutex;
			}
		}

		public Object AsyncState {
			//The application does not call this method because
			//null is passed in as the last parameter to BeginEventHandler.
			get {
				return myAsynchStateObject;
			}
		}

		public bool CompletedSynchronously {
			//The application wants to know if this is synchronous.
			//Return true if the Begin method was called synchronously.
			get { 
				return _blnCompletedSynchronously;
			}
		}
	}	
}