public override AbstractResponse OnTextRequest(TextRequest textRequest) { WeiXinHelper.UpdateRencentOpenID(textRequest.FromUserName); AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest); if (keyResponse != null) { return(keyResponse); } IList <Hidistro.Entities.VShop.ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys); if ((replies == null) || ((replies.Count == 0) && this.IsOpenManyService())) { this.GotoManyCustomerService(textRequest); } foreach (Hidistro.Entities.VShop.ReplyInfo info in replies) { if ((info.MatchType == MatchType.Equal) && (info.Keys == textRequest.Content)) { AbstractResponse response = this.GetResponse(info, textRequest.FromUserName); response.ToUserName = textRequest.FromUserName; response.FromUserName = textRequest.ToUserName; return(response); } if ((info.MatchType == MatchType.Like) && info.Keys.Contains(textRequest.Content)) { AbstractResponse response3 = this.GetResponse(info, textRequest.FromUserName); response3.ToUserName = textRequest.FromUserName; response3.FromUserName = textRequest.ToUserName; return(response3); } } return(this.DefaultResponse(textRequest)); }
public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest) { WriteLog("GetSubscribeReply"); ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply(); AbstractResponse result; if (subscribeReply == null) { WriteLog("subscribeReply == null"); result = null; } else { WriteLog("取消关注再关注,进入这个事件"); subscribeReply.Keys = "登录"; AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName); if (response == null) { this.GotoManyCustomerService(subscribeEventRequest); } response.ToUserName = subscribeEventRequest.FromUserName; response.FromUserName = subscribeEventRequest.ToUserName; result = response; //取消关注再关注,进入这个事件 ScanVisitDistributor(subscribeEventRequest, subscribeEventRequest.EventKey); } return(result); }
public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest) { WeiXinHelper.UpdateRencentOpenID(clickEventRequest.FromUserName); Hidistro.Entities.VShop.MenuInfo menu = VShopHelper.GetMenu(Convert.ToInt32(clickEventRequest.EventKey)); if (menu == null) { return(null); } Hidistro.Entities.VShop.ReplyInfo reply = ReplyHelper.GetReply(menu.ReplyId); if (reply == null) { return(null); } AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest); if (keyResponse != null) { return(keyResponse); } AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName); if (response == null) { this.GotoManyCustomerService(clickEventRequest); } response.ToUserName = clickEventRequest.FromUserName; response.FromUserName = clickEventRequest.ToUserName; return(response); }
public AbstractResponse OnEventRequest(EventRequest eventRequest) { AbstractResponse result = null; switch (eventRequest.Event) { case RequestEventType.Subscribe: result = this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest); break; case RequestEventType.UnSubscribe: result = this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest); break; case RequestEventType.Scan: this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest); break; case RequestEventType.Location: result = this.OnEvent_LocationRequest(eventRequest as LocationEventRequest); break; case RequestEventType.Click: result = this.OnEvent_ClickRequest(eventRequest as ClickEventRequest); break; default: throw new WeixinException("未知的Event下属请求信息"); } return(result); }
public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest) { int num = clickEventRequest.EventKey.ToInt(0); MenuInfo menuInfo = null; if (num > 0) { menuInfo = VShopHelper.GetMenu(num); } if (menuInfo == null) { return(null); } ReplyInfo reply = ReplyHelper.GetReply(menuInfo.ReplyId); if (reply == null) { return(null); } AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest); if (keyResponse != null) { return(keyResponse); } AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName, null); if (response == null) { return(this.GotoManyCustomerService(clickEventRequest)); } response.ToUserName = clickEventRequest.FromUserName; response.FromUserName = clickEventRequest.ToUserName; return(response); }
public override AbstractResponse OnTextRequest(TextRequest textRequest) { WeiXinHelper.UpdateRencentOpenID(textRequest.FromUserName); AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest); if (keyResponse != null) { return(keyResponse); } System.Collections.Generic.IList <Hidistro.Entities.VShop.ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys); if (replies == null || (replies.Count == 0 && this.IsOpenManyService())) { this.GotoManyCustomerService(textRequest); } foreach (Hidistro.Entities.VShop.ReplyInfo current in replies) { if (current.MatchType == MatchType.Equal && current.Keys == textRequest.Content) { AbstractResponse response = this.GetResponse(current, textRequest.FromUserName); response.ToUserName = textRequest.FromUserName; response.FromUserName = textRequest.ToUserName; AbstractResponse result = response; return(result); } if (current.MatchType == MatchType.Like && current.Keys.Contains(textRequest.Content)) { AbstractResponse response2 = this.GetResponse(current, textRequest.FromUserName); response2.ToUserName = textRequest.FromUserName; response2.FromUserName = textRequest.ToUserName; AbstractResponse result = response2; return(result); } } return(this.DefaultResponse(textRequest)); }
public override AbstractResponse DefaultResponse(AbstractRequest requestMessage) { ReplyInfo mismatchReply = ReplyHelper.GetMismatchReply(); AbstractResponse result; if (mismatchReply == null || this.IsOpenManyService()) { result = this.GotoManyCustomerService(requestMessage); } else { AbstractResponse response = this.GetResponse(mismatchReply, requestMessage.FromUserName); if (response == null) { result = this.GotoManyCustomerService(requestMessage); } else { response.ToUserName = requestMessage.FromUserName; response.FromUserName = requestMessage.ToUserName; result = response; } } return(result); }
public override AbstractResponse OnTextRequest(TextRequest textRequest) { AbstractResponse keyResponse = this.GetKeyResponse(textRequest.Content, textRequest); if (keyResponse != null) { return(keyResponse); } IList <ReplyInfo> replies = ReplyHelper.GetReplies(ReplyType.Keys); if (replies == null || (replies.Count == 0 && this.IsOpenManyService())) { return(this.GotoManyCustomerService(textRequest)); } foreach (ReplyInfo item in replies) { if (item.MatchType == MatchType.Equal && item.Keys == textRequest.Content) { AbstractResponse response = this.GetResponse(item, textRequest.FromUserName, null); response.ToUserName = textRequest.FromUserName; response.FromUserName = textRequest.ToUserName; return(response); } if (item.MatchType == MatchType.Like && item.Keys.Contains(textRequest.Content)) { AbstractResponse response2 = this.GetResponse(item, textRequest.FromUserName, null); response2.ToUserName = textRequest.FromUserName; response2.FromUserName = textRequest.ToUserName; return(response2); } } return(this.DefaultResponse(textRequest)); }
public override AbstractResponse OnEvent_ClickRequest(ClickEventRequest clickEventRequest) { int menuId = System.Convert.ToInt32(clickEventRequest.EventKey); MenuInfo menu = VShopHelper.GetMenu(menuId); if (menu == null) { return(null); } ReplyInfo reply = ReplyHelper.GetReply(menu.ReplyId); if (reply == null) { return(null); } //if (reply.ReplyType == ReplyType.Kefu)不合法 //{ // this.GotoManyCustomerService(clickEventRequest); //} AbstractResponse keyResponse = this.GetKeyResponse(reply.Keys, clickEventRequest); if (keyResponse != null) { return(keyResponse); } AbstractResponse response = this.GetResponse(reply, clickEventRequest.FromUserName); if (response == null) { this.GotoManyCustomerService(clickEventRequest); } response.ToUserName = clickEventRequest.FromUserName; response.FromUserName = clickEventRequest.ToUserName; return(response); }
private void HandleRowSetResult(AbstractResponse response) { ValidateResult(response); var resultResponse = (ResultResponse)response; if (resultResponse.Output is OutputSchemaChange) { //Schema changes need to do blocking operations HandleSchemaChange(resultResponse); return; } RowSet rs; if (resultResponse.Output is OutputRows) { rs = ((OutputRows)resultResponse.Output).RowSet; } else { if (resultResponse.Output is OutputSetKeyspace) { ((Session)_session).Keyspace = ((OutputSetKeyspace)resultResponse.Output).Value; } rs = new RowSet(); } _parent.SetCompleted(null, FillRowSet(rs, resultResponse)); }
public void HandleResponse(Exception ex, AbstractResponse response) { if (_parent.HasCompleted()) { //Do nothing else, another execution finished already set the response return; } try { if (ex != null) { HandleException(ex); return; } if (typeof(T) == typeof(RowSet)) { HandleRowSetResult(response); return; } if (typeof(T) == typeof(PreparedStatement)) { HandlePreparedResult(response); return; } throw new DriverInternalError(String.Format("RequestExecution with type {0} is not supported", typeof(T).FullName)); } catch (Exception handlerException) { _parent.SetCompleted(handlerException); } }
public AbstractResponse OnEventRequest(EventRequest eventRequest) { AbstractResponse response = null; switch (eventRequest.Event) { case RequestEventType.Subscribe: return(this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest)); case RequestEventType.UnSubscribe: return(this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest)); case RequestEventType.Scan: this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest); return(response); case RequestEventType.Location: return(this.OnEvent_LocationRequest(eventRequest as LocationEventRequest)); case RequestEventType.Click: return(this.OnEvent_ClickRequest(eventRequest as ClickEventRequest)); case RequestEventType.MASSSENDJOBFINISH: return(this.OnEvent_MassendJobFinishEventRequest(eventRequest as MassendJobFinishEventRequest)); case RequestEventType.VIEW: //URL跳转(view视图) return(this.OnEvent_ViewRequest(eventRequest as ViewEventRequest)); } throw new WeixinException("未知的Event下属请求信息"); }
public AbstractResponse PrepareComposeResponse(AbstractResponse response) { response.MessageError = response.Error != null?FormatErrorMessage(response.Error.Description) : null; response.ResponseCode = response.Error != null ? ResponseCode.ERROR : ResponseCode.SUCCESS; return(response); }
private Task SendFileResponseExtensions( HttpContext context, AbstractResponse response, DateTime beginTime) { response.Duration = (int)(DateTime.Now - beginTime).TotalMilliseconds; string responseBody = new JsonSerializer().Serialize(response); if (response is ErrorResponse) { context.Response.StatusCode = StatusCodes.Status400BadRequest; } else if (response is AccessLimitedResponse) { context.Response.StatusCode = StatusCodes.Status401Unauthorized; } else if (response is ExceptionResponse) { context.Response.StatusCode = StatusCodes.Status500InternalServerError; } context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); context.Response.Headers.Add("Keep-Alive", "timeout=500, max=100"); context.Response.ContentLength = responseBody.Length; return(context.Response.WriteAsync(responseBody)); }
public virtual void SendMessage(Guid userID, AbstractResponse resp = null) { if (resp == null) { resp = this.response; } sender.SendMessage(userID, resp); }
public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest) { string text = ""; if (subscribeEventRequest.EventKey != null) { text = subscribeEventRequest.EventKey; } if (text.Contains("qrscene_")) { text = text.Replace("qrscene_", "").Trim(); if (text == "1") { if (WeiXinHelper.BindAdminOpenId.Count > 10) { WeiXinHelper.BindAdminOpenId.Clear(); } if (WeiXinHelper.BindAdminOpenId.ContainsKey(subscribeEventRequest.Ticket)) { WeiXinHelper.BindAdminOpenId[subscribeEventRequest.Ticket] = subscribeEventRequest.FromUserName; } else { WeiXinHelper.BindAdminOpenId.Add(subscribeEventRequest.Ticket, subscribeEventRequest.FromUserName); } return(new TextResponse { CreateTime = System.DateTime.Now, Content = "您正在扫描尝试绑定管理员身份,身份已识别", ToUserName = subscribeEventRequest.FromUserName, FromUserName = subscribeEventRequest.ToUserName }); } ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(subscribeEventRequest.Ticket); Globals.Debuglog(text + ":" + subscribeEventRequest.Ticket, "_Debuglog.txt"); if (!MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName) && scanInfosByTicket != null && scanInfosByTicket.BindUserId > 0) { this.CreatMember(subscribeEventRequest.FromUserName, scanInfosByTicket.BindUserId); ScanHelp.updateScanInfosLastActiveTime(System.DateTime.Now, scanInfosByTicket.Sceneid); } } WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName); Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply(); if (subscribeReply == null) { return(null); } subscribeReply.Keys = "登录"; AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName); if (response == null) { this.GotoManyCustomerService(subscribeEventRequest); } response.ToUserName = subscribeEventRequest.FromUserName; response.FromUserName = subscribeEventRequest.ToUserName; return(response); }
public static void AddWarning(this AbstractResponse response, string description, string parameter = null) { response.Errors.Add(new ResponseError() { ErrorType = ErrorTypes.MissingData, Description = description, ParameterName = parameter }); }
public static void AddNoPermissionError(this AbstractResponse response, string description = "") { response.HasError = true; response.Errors.Add(new ResponseError() { ErrorType = ErrorTypes.NoPermission, Description = description }); }
public static void AddMissingDataError(this AbstractResponse response, string description, string parameter) { response.HasError = true; response.Errors.Add(new ResponseError() { ErrorType = ErrorTypes.MissingData, Description = description, ParameterName = parameter }); }
public static void AddNotFoundError(this AbstractResponse response, string parameterName) { response.HasError = true; response.Errors.Add(new ResponseError() { ErrorType = ErrorTypes.InvalidData, Description = $"The data for {parameterName} was not found.", ParameterName = parameterName }); }
public void Ctor_NoFlags_BodyStreamPositionIsZero() { // Arrange var frame = new ResponseFrame(new FrameHeader(), new MemoryStream(new byte[] { 1 })); // Act var uut = new AbstractResponse(frame); // Assert Assert.AreEqual(0, frame.Body.Position); }
public void Ctor_NoFlags_TraceIdIsNull() { // Arrange var frame = new ResponseFrame(new FrameHeader(), new MemoryStream()); // Act var uut = new AbstractResponse(frame); // Assert Assert.IsNull(uut.TraceId); }
private static void ValidateResult(AbstractResponse response) { if (response == null) { throw new DriverInternalError("Response can not be null"); } if (!(response is ResultResponse)) { throw new DriverInternalError("Excepted ResultResponse, obtained " + response.GetType().FullName); } }
/// <summary> /// The OnInspectorGUI /// </summary> public override void OnInspectorGUI() { instance.Event = (GameEvent)EditorGUILayout.ObjectField("Event", instance.Event, typeof(GameEvent), false, null); Rect rect = GUILayoutUtility.GetRect(0, 40, GUILayout.ExpandWidth(true)); GUI.Box(rect, "Drop Response objects here!"); if (rect.Contains(Event.current.mousePosition)) { if (Event.current.type == EventType.DragUpdated) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; Event.current.Use(); } if (Event.current.type == EventType.DragPerform) { foreach (Object o in DragAndDrop.objectReferences) { AbstractResponse r = (AbstractResponse)o; if (r != null) { instance.Responses.Add(r); showResponses.Add(true); } } Event.current.Use(); } } for (int i = 0; i < instance.Responses.Count; i++) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); EditorGUILayout.BeginHorizontal(); showResponses[i] = EditorGUILayout.Foldout(showResponses[i], "Response " + (i + 1)); instance.Responses[i] = (AbstractResponse) EditorGUILayout.ObjectField("", instance.Responses[i], typeof(AbstractResponse), false, null); if (instance.Responses[i] == null) { instance.Responses.RemoveAt(i); showResponses.RemoveAt(i); break; } EditorGUILayout.EndHorizontal(); if (showResponses[i]) { CreateEditor(instance.Responses[i]).OnInspectorGUI(); } EditorGUILayout.EndVertical(); } }
public override AbstractResponse OnEvent_ScanRequest(ScanEventRequest scanEventRequest) { string eventKey = scanEventRequest.EventKey; if (eventKey == "1") { if (WeiXinHelper.BindAdminOpenId.Count > 10) { WeiXinHelper.BindAdminOpenId.Clear(); } if (WeiXinHelper.BindAdminOpenId.ContainsKey(scanEventRequest.Ticket)) { WeiXinHelper.BindAdminOpenId[scanEventRequest.Ticket] = scanEventRequest.FromUserName; } else { WeiXinHelper.BindAdminOpenId.Add(scanEventRequest.Ticket, scanEventRequest.FromUserName); } return(new TextResponse { CreateTime = DateTime.Now, Content = "您正在扫描尝试绑定管理员身份,身份已识别", ToUserName = scanEventRequest.FromUserName, FromUserName = scanEventRequest.ToUserName }); } ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(scanEventRequest.Ticket); Globals.Debuglog(eventKey + ":" + scanEventRequest.Ticket, "_Debuglog.txt"); bool flag = MemberProcessor.IsExitOpenId(scanEventRequest.FromUserName); if ((!flag && (scanInfosByTicket != null)) && (scanInfosByTicket.BindUserId > 0)) { this.CreatMember(scanEventRequest.FromUserName, scanInfosByTicket.BindUserId); } if (scanInfosByTicket != null) { ScanHelp.updateScanInfosLastActiveTime(DateTime.Now, scanInfosByTicket.Sceneid); } if (flag) { return(new TextResponse { CreateTime = DateTime.Now, Content = "您刚扫描了分销商公众号二维码!", ToUserName = scanEventRequest.FromUserName, FromUserName = scanEventRequest.ToUserName }); } Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply(); if (subscribeReply == null) { return(null); } subscribeReply.Keys = "扫描"; AbstractResponse response = this.GetResponse(subscribeReply, scanEventRequest.FromUserName); response.ToUserName = scanEventRequest.FromUserName; response.FromUserName = scanEventRequest.ToUserName; return(response); }
public AbstractResponse OnEventRequest(EventRequest eventRequest) { AbstractResponse response = null; WriteLog("start2:" + eventRequest.Event); switch (eventRequest.Event) { case RequestEventType.Subscribe: { response = this.OnEvent_SubscribeRequest(eventRequest as SubscribeEventRequest); break; } case RequestEventType.UnSubscribe: { response = this.OnEvent_UnSubscribeRequest(eventRequest as UnSubscribeEventRequest); break; } case RequestEventType.Scan: { this.ResponseMessage = this.OnEvent_ScanRequest(eventRequest as ScanEventRequest); break; } case RequestEventType.Location: { response = this.OnEvent_LocationRequest(eventRequest as LocationEventRequest); break; } case RequestEventType.Click: { response = this.OnEvent_ClickRequest(eventRequest as ClickEventRequest); break; } case RequestEventType.VIEW: { response = this.OnEvent_ViewRequest(eventRequest as ViewEventRequest); break; } default: { throw new WeixinException("未知的Event下属请求信息"); // break; } } return(response); }
public AbstractResponse GotoManyCustomerService(AbstractRequest requestMessage) { if (!this.IsOpenManyService()) { return(null); } AbstractResponse abstractResponse = new AbstractResponse(); abstractResponse.FromUserName = requestMessage.ToUserName; abstractResponse.ToUserName = requestMessage.FromUserName; abstractResponse.MsgType = ResponseMsgType.transfer_customer_service; return(abstractResponse); }
public void Execute() { if (RequestMessage != null) { switch (RequestMessage.MsgType) { case RequestMsgType.Text: { ResponseMessage = OnTextRequest(RequestMessage as TextRequest); return; } case RequestMsgType.Image: { ResponseMessage = OnImageRequest(RequestMessage as ImageRequest); return; } case RequestMsgType.Voice: { ResponseMessage = OnVoiceRequest(RequestMessage as VoiceRequest); return; } case RequestMsgType.Video: { ResponseMessage = OnVideoRequest(RequestMessage as VideoRequest); return; } case RequestMsgType.Location: { ResponseMessage = OnLocationRequest(RequestMessage as LocationRequest); return; } case RequestMsgType.Link: { ResponseMessage = OnLinkRequest(RequestMessage as LinkRequest); return; } case RequestMsgType.Event: { ResponseMessage = OnEventRequest(RequestMessage as EventRequest); return; } } throw new WeixinException("未知的MsgType请求类型"); } }
/// <summary> /// 服务器响应微信请求 /// </summary> /// <param name="weixin"></param> /// <returns></returns> private ActionResult ResponseMsg(string weixin) { // 尝试读取消息. AbstractRequest requestMessage = messageReader.ReadMessage(weixin); if (logger.IsDebugEnabled) { logger.DebugFormat("尝试读取消息, 读取结果: {0}", requestMessage); } if (requestMessage == null) { logger.Warn("无法识别的消息!"); // 无法识别的消息. return(Content("")); } // 消息处理管理器. ProcessServerManager manager = ProcessServerManager.Instance(); // 处理具体请求. AbstractResponse response = manager.ProcessRequest(requestMessage); if (logger.IsDebugEnabled) { logger.DebugFormat("尝试处理消息, 处理结果: {0}", response); } if (response != null) { // 处理成功. string xmlData = response.ToXml(); if (logger.IsDebugEnabled) { logger.DebugFormat("提交反馈的 XML 消息: {0}", xmlData); } return(Content(xmlData, "text/xml", Encoding.UTF8)); } logger.WarnFormat("存在有消息,没有进行处理:{0}", weixin); return(Content("")); }
public void Ctor_TraceFlagSet_BytesReadFromFrame() { // Arrange var header = new FrameHeader { Flags = AbstractResponse.TraceFlagValue }; var body = new MemoryStream(new byte[20]); var frame = new ResponseFrame(header, body); // Act var uut = new AbstractResponse(frame); // Assert Assert.AreEqual(16, body.Position); Assert.AreEqual(20, body.Length); }
public void Ctor_TraceFlagSet_TraceIdIsSet() { // Arrange var header = new FrameHeader {Flags = FrameHeader.HeaderFlag.Tracing}; var rnd = new Random(); var buffer = new byte[16]; rnd.NextBytes(buffer); var expected = new Guid(TypeCodec.GuidShuffle(buffer)); var body = new MemoryStream(buffer); var frame = new ResponseFrame(header, body); // Act var uut = new AbstractResponse(frame); // Assert Assert.AreEqual(expected, uut.TraceId); }
/// <summary> /// Process and respond to a token request using HttpListenerRequest and HttpListenerResponse objects. /// </summary> /// <param name="request">Request to process.</param> /// <param name="response">Response object to respond with.</param> /// <param name="mode">Token request mode.</param> /// <param name="store">Token storage object.</param> public static void HandleTokenRequest(HttpListenerRequest request, HttpListenerResponse response, ServerRequestMode mode, IServerTokenStore store) { AbstractRequest arequest = new AbstractRequest(request); AbstractResponse aresponse = new AbstractResponse(response); HandleHttpTokenRequest(arequest, aresponse, mode, store); }
/// <summary> /// Abstract method to handle token requests. /// </summary> /// <param name="request">Abstracted HTTP request object.</param> /// <param name="response">Abstracted HTTP response object.</param> /// <param name="mode">Token request mode.</param> /// <param name="store">Token storage provider.</param> static void HandleHttpTokenRequest(AbstractRequest request, AbstractResponse response, ServerRequestMode mode, IServerTokenStore store) { StreamWriter sw = new StreamWriter(response.OutputStream); NameValueCollection nvc = null; nvc = DecodeRequest(request); if (nvc == null) { response.StatusCode = 400; sw.Write("Unsupported HTTP request method"); sw.Dispose(); return; } TokenProcessingResult result = HandleTokenRequest(mode, request.Url, request.HttpMethod, nvc, store); if (!result.Success) { switch (result.FailGenericCondition) { case FailureGenericType.BadRequest: response.StatusCode = 400; break; case FailureGenericType.Unauthorized: response.StatusCode = 401; break; } sw.Write(result.FailReason); sw.Dispose(); return; } sw.Write(OAuthUtility.ArgsToVal(result.ResponseArguments, AuthenticationMethod.Post)); sw.Dispose(); }