-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCapsules.cs
228 lines (207 loc) · 7.7 KB
/
Capsules.cs
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
using System;
using System.Collections.Specialized;
using System.Web;
/// <summary>
/// AJAX Functionality
/// </summary>
namespace Ajax
{
/// <summary>
/// Categorizes every Capsule by its inheritance.
/// Required due to their different AjaxHandler delegate signatures.
/// </summary>
public enum CapsuleType
{
/// <summary>
/// Capsule inherited from InvocationCapsule
/// </summary>
Invocation,
/// <summary>
/// Capsule inherited from SubmissionCapsule
/// </summary>
Submission
};
/// <summary>
/// Capsule Interface ( for easy use of Generics for Capsules e.g. mRegisteredCapsules Dictionary )
/// </summary>
public interface ICapsule
{
// Capsule Type Category
CapsuleType Type
{
get;
}
}
/// <summary>
/// Capsule template for string transmission.
/// Encapsulates a set of delegate/event for registration of serverside methods.
/// Valid Methods have a "string ( string )" Signature.<para>
/// Override OnInvoke(string) to Handle Callbacks.</para>
/// Use RegisteredMethod(string) to call the requested registered method.
/// </summary>
public abstract class InvocationCapsule : ICapsule
{
// Capsule Type Category
public CapsuleType Type
{
get { return CapsuleType.Invocation; }
}
/// <summary>
/// Specifies if the common rendering response should be interrupted and canceled.
/// Default is true.
/// </summary>
protected bool InterruptRendering = true;
/// <summary>
/// The response stream to write to
/// </summary>
protected HttpResponse Response;
/// <summary>
/// Delegate containing the method that shall be rised by Invoke event
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
public delegate string AjaxHandler(string parameter);
/// <summary>
/// Event that raises the registered Method
/// </summary>
public event AjaxHandler Invoke;
/// <summary>
/// Returns the internal AjaxHandler delegate to reflect the added method name
/// </summary>
/// <returns>AjaxHandler delegate</returns>
internal AjaxHandler InternalDelegate
{
get { return Invoke; }
}
/// <summary>
/// Calls the registered method requested by the client.
/// </summary>
/// <param name="parameter">Parameter to put into the registered method</param>
/// <returns>Result value of the method</returns>
protected string RegisteredMethod(string parameter)
{
return Invoke(parameter);
}
/// <summary>
/// This will internally trigger the Event.
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
internal void RaiseInvocation(HttpResponse response, string parameter)
{
Response = response;
if (InterruptRendering)
response.Clear();
// Call custom handling method and send response
response.Write(OnInvoke(parameter));
if (InterruptRendering)
response.End();
}
/// <summary>
/// Will be triggered on Callback.
/// Override this method to create your own Capsules.
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
protected abstract string OnInvoke(string parameter);
}
/// <summary>
/// Capsule template for form transmission.
/// Encapsulates a set of delegate/event for registration of serverside methods.
/// Valid Methods have a "string ( NameValueCollection )" Signature.<para>
/// Override OnInvoke(string) to Handle Callbacks.</para>
/// Use RegisteredMethod(string) to call the requested registered method.
/// </summary>
public abstract class SubmissionCapsule : ICapsule
{
// Capsule Type Category
public CapsuleType Type
{
get { return CapsuleType.Submission; }
}
/// <summary>
/// Specifies if the common rendering response should be interrupted and canceled.
/// Default is true.
/// </summary>
protected bool InterruptRendering = true;
/// <summary>
/// The response stream to write to
/// </summary>
protected HttpResponse Response;
/// <summary>
/// Delegate containing the method that shall be rised by Invoke event
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
public delegate string AjaxHandler(NameValueCollection parameter);
/// <summary>
/// Event that raises the registered Method
/// </summary>
public event AjaxHandler Invoke;
/// <summary>
/// Returns the internal AjaxHandler delegate to reflect the added method name
/// </summary>
/// <returns>AjaxHandler delegate</returns>
internal AjaxHandler InternalDelegate
{
get { return Invoke; }
}
/// <summary>
/// Calls the registered method requested by the client.
/// </summary>
/// <param name="parameter">Parameter to put into the registered method</param>
/// <returns>Result value of the method</returns>
protected string RegisteredMethod(NameValueCollection parameter)
{
return Invoke(parameter);
}
/// <summary>
/// This will internally trigger the Event
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
internal void RaiseInvocation(HttpResponse response, NameValueCollection parameter)
{
Response = response;
if (InterruptRendering)
response.Clear();
// Call custom handling method and send response
response.Write(OnInvoke(parameter));
if (InterruptRendering)
response.End();
}
/// <summary>
/// Will be triggered on Callback.
/// Override this method to create your own Capsules.
/// </summary>
/// <param name="parameter">Information transmitted by Client</param>
/// <returns>Information to transmit back to client</returns>
protected abstract string OnInvoke(NameValueCollection parameter);
}
/// <summary>
/// Common Capsule for string transmission.
/// Triggers the registered method on Callback.
/// </summary>
public class CommonInvocation : InvocationCapsule
{
// Called by Invoke event
protected override string OnInvoke(string parameter)
{
// Respond registered Method Response
return this.RegisteredMethod(parameter);
}
}
/// <summary>
/// Common Capsule for form transmission.
/// Triggers the registered method on Callback.
/// </summary>
public class CommonSubmission : SubmissionCapsule
{
// Called by Invoke event
protected override string OnInvoke(NameValueCollection parameter)
{
// Respond registered Method Response
return this.RegisteredMethod(parameter);
}
}
}