Exemplo n.º 1
0
        // For recieving and sending replies to host as far as I can tell
        private static bool ApiReceiver(SoapAPI api)
        {
            try
            {
                // Based on what myApi.MessageType is
                switch (api.MessageType)
                {
                case MessageTypes.Request:                         // Did we recieve a request for a reply from the host?
                    OnRequest?.Invoke(api, new VmsRequestEventArgs
                    {
                        Request = new VmsCommand(api)
                    });

                    break;

                case MessageTypes.Reply:                         // Did we recieve a reply from the host?
                    OnReply?.Invoke(api, new VmsReplyEventArgs
                    {
                        Reply = new VmsCommand(api)
                    });
                    break;

                default:
                    break;
                }
                return(true);
            }
            catch (Exception ex)
            {
                //MessageBox.Show("Error: " + ex.ToString());
                return(false);
            }
        }
Exemplo n.º 2
0
        public void ReadCallback(IAsyncResult ar)
        {
            var state     = (HubState)ar.AsyncState;
            var bytesRead = state.WorkSocket.EndReceive(ar);

            if (bytesRead <= 0)
            {
                return;
            }
            bool recv;

            try
            {
                recv = state.Receive(bytesRead);
            }
            catch (Exception e)
            {
                state.SendError(e);
                recv = true;
            }

            if (recv)
            {
                OnRequest?.Invoke(this, state);
                Send(state);
            }
            else
            {
                state.WorkSocket.BeginReceive(state.Buffer, state.BufferLen, Config.BufferSize, 0,
                                              ReadCallback, state);
            }
        }
Exemplo n.º 3
0
        public async Task StartAsync()
        {
            try
            {
                HttpListener.Start();
                isFinished = new ManualResetEvent(false);
                logger?.LogInformation("HttpListener for requests on [{0}] running!", string.Join(", ", UriPrefixes));

                while (!isFinished.WaitOne(0) && HttpListener.IsListening)
                {
                    var ctx = await HttpListener.GetContextAsync();

                    Request  request  = new Request(ctx);
                    Response response = new Response(ctx);
                    // logger?.LogDebug("{0}: {1} {2}", DateTime.Now, request.Method, request.Endpoint);
                    Console.WriteLine("HttpListener {0}: {1} {2}", DateTime.Now, request.Method, request.Endpoint);

                    OnRequest?.Invoke(request, response);
                }
            }
            catch (Exception e)
            {
                logger?.LogError("HttpListener StartAsync Error:{0}", e.Message);
            }
            finally
            {
                HttpListener = null;
            }

            logger?.LogInformation("HttpListener for requests on {0} FINISHED", string.Join(", ", UriPrefixes));
        }
Exemplo n.º 4
0
        public static object Request(RequestType what, RequestProperty want)
        {
            object r;

            r = OnRequest?.Invoke(what, want);
            return(r);
        }
Exemplo n.º 5
0
        private async void ListenAsyncImpl()
        {
            //if this method fails due to an access denied error, run visual studio as an administrator
            _listener.Start();
            while (_listener.IsListening)
            {
                HttpListenerContext ctx = null;

                try
                {
                    ctx = await _listener.GetContextAsync().ConfigureAwait(false);
                }
                catch (HttpListenerException e)
                {
                    OnError?.Invoke(this, e);
                }

                if (ctx == null)
                {
                    return;
                }

                OnRequest?.Invoke(this, ctx);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// This method is called to process an incoming payload.
        /// </summary>
        /// <param name="rq">The message to process.</param>
        /// <param name="responses">The return path for the message.</param>
        public virtual async Task ProcessRequest(TransmissionPayload rq, List <TransmissionPayload> responses)
        {
            int start = StatisticsInternal.ActiveIncrement();

            try
            {
                var header = rq.Message.ToServiceMessageHeader();

                H handler;
                if (!SupportedResolve(header, out handler))
                {
                    OnRequestUnresolved?.Invoke(this, rq);
                    throw new CommandNotSupportedException(rq.Id, header, GetType());
                }

                OnRequest?.Invoke(this, rq);
                //Call the registered command.
                await handler.Execute(rq, responses);
            }
            catch (Exception)
            {
                StatisticsInternal.ErrorIncrement();
                //throw any errors back out to the dispatcher.
                throw;
            }
            finally
            {
                StatisticsInternal.ActiveDecrement(start);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Process a request.
        /// </summary>
        /// <param name="context"></param>
        private void Process(HttpListenerContext context)
        {
            OnRequest?.Invoke(context.Request);

            var filename = context.Request.Url.AbsolutePath.Substring(1);

            if (string.IsNullOrEmpty(filename))
            {
                foreach (var indexFile in indexFiles)
                {
                    if (!File.Exists(Path.Combine(root, indexFile)))
                    {
                        continue;
                    }

                    filename = indexFile;
                    break;
                }
            }

            filename = Path.Combine(root, filename);

            string mime;

            if (File.Exists(filename) && mimeTypeMappings.TryGetValue(Path.GetExtension(filename), out mime))
            {
                try
                {
                    Stream input = new FileStream(filename, FileMode.Open);

                    context.Response.ContentType     = mime;
                    context.Response.ContentLength64 = input.Length;
                    context.Response.AddHeader("Date", DateTime.Now.ToString("r"));
                    context.Response.AddHeader("Last-Modified", File.GetLastWriteTime(filename).ToString("r"));

                    int    nbytes;
                    byte[] buffer = new byte[1024 * 16];

                    while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        context.Response.OutputStream.Write(buffer, 0, nbytes);
                    }

                    input.Close();

                    context.Response.StatusCode = (int)HttpStatusCode.OK;
                    context.Response.OutputStream.Flush();
                }
                catch
                {
                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                }
            }
            else
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
            }

            context.Response.OutputStream.Close();
        }
Exemplo n.º 8
0
 protected override void ProcessRequest(HttpRequest request)
 {
     OnRequest?.Invoke(request);
     if (OnRequest.GetInvocationList().Length == 0)
     {
         request.Respond("This request is not handled.", System.Net.HttpStatusCode.BadRequest);
     }
 }
Exemplo n.º 9
0
        public TransferAnswer SendRequest(TransferRequest request)
        {
            var src = request.Source;
            var dst = request.Destination;

            OnRequest?.Invoke(this, EventArgs.Empty);

            return(new TransferAnswer());
        }
Exemplo n.º 10
0
            protected override Task Process(HttpListenerContext context, ILogger logger, CancellationToken cancellation)
            {
                if (OnRequest != null)
                {
                    return(OnRequest.Invoke(context, cancellation));
                }

                return(base.Process(context, logger, cancellation));
            }
Exemplo n.º 11
0
        private void Listen()
        {
            Console.WriteLine("Started listening on {0}", Address);

            while (listener.IsListening)
            {
                var context = listener.GetContext();
                OnRequest?.Invoke(this, context);
            }

            Console.WriteLine("Stopped listening");
        }
Exemplo n.º 12
0
            /// <summary>收到客户端发来的数据。子类可通过重载该方法来修改数据</summary>
            /// <param name="e"></param>
            protected override void OnReceive(ReceivedEventArgs e)
            {
                // 解析请求头
                var stream = e.Packet.GetStream();
                var entity = HttpHeader.Read(stream, HttpHeaderReadMode.Request);

                if (entity == null)
                {
                    base.OnReceive(e);
                    return;
                }

                WriteLog("{3}请求:{0} {1} [{2}]", entity.Method, entity.Url, entity.ContentLength, ID);

                Request = entity;
                OnRequest?.Invoke(this, e);

                var pxy  = Host as HttpReverseProxy;
                var host = entity.Url.IsAbsoluteUri ? entity.Url.Host : pxy.RemoteServer.Host;

                RemoteHost  = host;
                RawHost     = entity.Host;
                entity.Host = host;

                // 引用
                var r = entity.Referer;

                if (!String.IsNullOrEmpty(r))
                {
                    var ri = new Uri(r, UriKind.RelativeOrAbsolute);
                    if (ri.IsAbsoluteUri && ri.Authority == RawHost)
                    {
                        r = r.Replace(RawHost, host);
                        entity.Referer = r;
                    }
                }

                //// 取消压缩
                //var key = "Accept-Encoding";
                //if (entity.Headers.ContainsKey(key)) entity.Headers.Remove(key);

                // 重新构造请求
                var ms = new MemoryStream();

                entity.Write(ms);
                stream.CopyTo(ms);
                ms.Position = 0;

                //e.Stream = ms;
                e.Packet = ms.ToArray();

                base.OnReceive(e);
            }
Exemplo n.º 13
0
        /// <summary>
        /// 监听到请求时
        /// </summary>
        private void ListenedRequest(IAsyncResult result)
        {
            var context = listener.EndGetContext(result);

            if (OnRequest != null)
            {
                try
                {
                    OnRequest.Invoke(context);
                }
                catch { }
            }
            listener.BeginGetContext(ListenedRequest, null);
        }
Exemplo n.º 14
0
        private void SendCallback(IAsyncResult ar)
        {
            var state = (AgentState)ar.AsyncState;

            try
            {
                state.WorkSocket.EndSend(ar);
                SendDone.Set();
                OnRequest?.Invoke(this, state);
            }
            catch (Exception e)
            {
                Abort(state, e);
            }
        }
Exemplo n.º 15
0
        private async Task ProcessTranslation(HttpListenerRequest req, HttpListenerResponse resp)
        {
            string?japanese = GetTextParam(req);

            OnRequest?.Invoke(req.RemoteEndPoint, japanese);
            if (japanese == null)
            {
                return;
            }

            string?korean = await Translator.Translate(japanese ?? "").ConfigureAwait(false);

            resp.ContentType = "text/plain; charset=utf-8";
            byte[] buf = Encoding.UTF8.GetBytes(korean);
            resp.ContentLength64 = buf.LongLength;
            await resp.OutputStream.WriteAsync(buf, 0, buf.Length);
        }
Exemplo n.º 16
0
 internal void OnRequestEvent(Request req)
 {
     if (OnRequest != null)
     {
         try
         {
             OnRequest.Invoke(req, this);
         }
         catch (Exception ex)
         {
             Trace.WriteLine("HTTP/Server/OnRequest Unhandled Exception: " + ex);
         }
     }
     else
     {
         throw new Exception("HTTP Request Handler OnRequest Not Attached.");
     }
 }
Exemplo n.º 17
0
        // Create and configure our web server.
        private WebServer CreateWebServer(string url, string origins, string headers, string methods)
        {
            var server = new WebServer(o => o
                                       .WithUrlPrefix(url)
                                       .WithMode(HttpListenerMode.EmbedIO)
                                       )
                         .WithCors(origins, headers, methods)
                         .OnAny(async ctx =>
            {
                var req     = await ctx.GetRequestBodyAsStringAsync();
                var headers = ctx.Request.Headers.ToStringDictionary().ToJson();
                var query   = ctx.GetRequestQueryData().ToStringDictionary().ToJson();
                OnRequest?.Invoke(req, headers, query);
                await ctx.SendDataAsync("OK");
            });

            return(server);
        }
Exemplo n.º 18
0
Arquivo: Pipe.cs Projeto: aa2g/PPeX
        protected void ServerMethod()
        {
            internalPipe.WaitForConnection();
            StreamHandler handler = new StreamHandler(new BufferedStream(internalPipe));

            while (true)
            {
                string request = handler.ReadString();

                string argument = handler.ReadString();

                if (!internalPipe.IsConnected)
                {
                    OnDisconnect?.Invoke(this, null);
                }

                OnRequest?.Invoke(request, argument, handler);
            }
        }
Exemplo n.º 19
0
        private async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            /*
             * по идее разных видов Response может быть много и каждый из них надо по особенному обрабатывать,
             * думаю можно эту логику вынести в какой-нибудь responseHandler
             */
            var message = messageEventArgs.Message;

            try
            {
                var request = AnalyzeIncomingMessage(message);
                OnRequest?.Invoke(request);
                var response = Handler.ProcessMessage(request);

                //TODO: проверка на null
                if (response is ButtonResponse)
                {
                    var buttonAnswer = (ButtonResponse)response;
                    await Bot.SendTextMessageAsync(message.Chat.Id, buttonAnswer.Text,
                                                   replyMarkup : GetKeyboard(buttonAnswer.ButtonNames));
                }
                else if (response is TextResponse)
                {
                    var textAnswer = (TextResponse)response;
                    await Bot.SendTextMessageAsync(message.Chat.Id, textAnswer.Text);
                }
                else
                {
                    await Bot.SendTextMessageAsync(message.Chat.Id, response.Text);
                }
            }
            catch (ArgumentException e)
            {
                OnError?.Invoke(e);
                await Bot.SendTextMessageAsync(message.Chat.Id, e.Message);
            }
            catch (Exception e)
            {
                OnError?.Invoke(e);
            }
        }
Exemplo n.º 20
0
        public async Task <ResponseData> RequestAsync(
            string method,
            string url,
            IReadOnlyDictionary <string, string> headers,
            string entityOpt = null
            )
        {
            var args = new FakeClientRequestEventArgs(
                RequestCounter += 1,
                DefaultResponseData,
                method,
                url,
                headers,
                entityOpt
                );

            OnRequest?.Invoke(this, args);
            await Task.Delay(0);

            return(args.ResponseData);
        }
        private async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            try
            {
                var request = AnalyzeIncomingMessage(message);
                OnRequest?.Invoke(request);
                var response = ResponseHandler.ResponseAnalyzer(SessionHandler.ProcessMessage(request));
                await Bot.SendTextMessageAsync(message.Chat.Id, response.Text, replyMarkup : response.Markup);
            }
            catch (ArgumentException e)
            {
                OnError?.Invoke(e);
                await Bot.SendTextMessageAsync(message.Chat.Id, e.Message);
            }
            catch (Exception e)
            {
                OnError?.Invoke(e);
            }
        }
Exemplo n.º 22
0
        private void HandleMessage(Message message)
        {
            ThreadPool.QueueUserWorkItem(async delegate
            {
                if (message is RequestMessage requestMessage)
                {
                    Message responseMessage = OnRequest?.Invoke(this, requestMessage.Request);

                    await SendAsync(new ResponseMessage(requestMessage.ID, responseMessage));
                }
                else if (message is ResponseMessage responseMessage)
                {
                    if (pendingRequests.TryGetValue(responseMessage.RequestID, out TaskCompletionSource <Message> taskCompletionSource))
                    {
                        taskCompletionSource.TrySetResult(responseMessage.Response);
                    }
                }
                else
                {
                    OnMessage?.Invoke(this, message);
                }
            });
Exemplo n.º 23
0
        private async void ListenAsyncImpl()
        {
            _listener.Start();
            while (_listener.IsListening)
            {
                HttpListenerContext ctx = null;

                try
                {
                    ctx = await _listener.GetContextAsync().ConfigureAwait(false);
                } catch (HttpListenerException e)
                {
                    OnError?.Invoke(this, e);
                }

                if (ctx == null)
                {
                    return;
                }

                OnRequest?.Invoke(this, ctx);
            }
        }
Exemplo n.º 24
0
 protected void WebsiteLife()
 {
     try
     {
         while (Listener.IsListening)
         {
             HttpListenerContext context = Listener.GetContext();
             Task.Factory.StartNew(() =>
             {
                 Stream output = context.Response.OutputStream;
                 byte[] buffer;
                 if (issipmle)
                 {
                     buffer = System.Text.Encoding.UTF8.GetBytes(onRequestSimple.Invoke(
                                                                     context.Request.Url.AbsolutePath,
                                                                     context.Request.Url.Query,
                                                                     context.Request.HttpMethod
                                                                     ));
                 }
                 else
                 {
                     buffer = System.Text.Encoding.UTF8.GetBytes(onRequest.Invoke(context));
                 }
                 output.Write(buffer, 0, buffer.Length);
                 output.Close();
             });
         }
     }
     catch (ThreadAbortException ex)
     {
         //
     }
     catch (Exception ex)
     {
         throw new WebsiteException(ex);
     }
 }
Exemplo n.º 25
0
        static async void MakeAnalysisRequest(string filePath)
        {
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

            string requestParameters = "returnFaceId=true&returnFaceLandmarks=false" +
                                       "&returnFaceAttributes=emotion";

            string uri = uriBase + "?" + requestParameters;

            HttpResponseMessage response;

            var data = GetImageAsByteArray(filePath);

            using (var content = new ByteArrayContent(data))
            {
                try
                {
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                    response = await client.PostAsync(uri, content);

                    var contentString = await response.Content.ReadAsStringAsync();

                    var json = JsonConvert.DeserializeObject <List <FaceResult> >(contentString);

                    OnRequest?.Invoke(json[0]);

                    Debug.Log(json[0]);
                }
                catch (Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
        }
 public Task Wait()
 {
     OnRequest?.Invoke(); return(_task.Task);
 }
Exemplo n.º 27
0
        private async Task <bool> HandleClient(TcpClient client)
        {
            NetwrkWebClient webClient = new NetwrkWebClient(client);

            if (Certificate != null)
            {
                await webClient.SslAuthenticateAsServerAsync(Certificate);
            }

            NetwrkWebRequest request = await webClient.ReceiveAsync <NetwrkWebRequest>();

            if (request == null)
            {
                return(false);
            }

            if (request.IsWebSocketRequest)
            {
                if (OnWebsocketRequest?.Invoke(this, request) ?? true)
                {
                    NetwrkWebResponse response = new NetwrkWebResponse
                    {
                        Version    = request.Version,
                        StatusCode = NetwrkHttpStatusCode.SwitchingProtocols
                    };

                    response.Headers[NetwrkKnownHttpHeaders.Upgrade]    = "websocket";
                    response.Headers[NetwrkKnownHttpHeaders.Connection] = "Upgrade";
                    response.Headers[NetwrkKnownHttpHeaders.Server]     = "Netwrk/1.0";

                    using (var sha1 = SHA1.Create())
                    {
                        string accept      = request.Headers[NetwrkKnownHttpHeaders.SecWebSocketKey] + NetwrkWebSocket.ConstantKey;
                        byte[] acceptBytes = Encoding.ASCII.GetBytes(accept);
                        byte[] acceptSha1  = sha1.ComputeHash(acceptBytes);

                        response.Headers[NetwrkKnownHttpHeaders.SecWebSocketAccept] = Convert.ToBase64String(acceptSha1);
                    }

                    await webClient.SendAsync(response);

                    NetwrkWebSocket webSocket = new NetwrkWebSocket(client, webClient.Stream);

                    OnWebSocketConnection?.Invoke(this, webSocket);

                    webSocket.Start();
                }
            }
            else
            {
                NetwrkWebResponse response = OnRequest?.Invoke(this, request) ?? new NetwrkWebResponse
                {
                    Version    = request.Version,
                    StatusCode = NetwrkHttpStatusCode.InternalServerError
                };

                await webClient.SendAsync(response);

                client.Close();
            }

            return(true);
        }
Exemplo n.º 28
0
        private void ProcessReceivingMessages()
        {
            Task.Run(async() =>
            {
                while (socket.State == WebSocketState.Open)
                {
                    ArraySegment <byte> buffer;
                    WebSocketReceiveResult result = null;
                    try
                    {
                        buffer = new ArraySegment <byte>(new byte[1024]);
                        result = await socket.ReceiveAsync(buffer, ReceiveTokenSource.Token);
                    }
                    catch (Exception ex)
                    {
                        socket      = null;
                        IsActive    = false;
                        IsConnected = false;
                        return;
                    }

                    if (result == null || result.Count == 0)
                    {
                        continue;
                    }

                    Kaenx.Konnect.Remote.MessageCodes code = (Konnect.Remote.MessageCodes)buffer.Array[0];

                    Debug.WriteLine("Got Remote Message: " + code);

                    //Check if assemby from this genügt
                    var q = from t in Assembly.LoadFrom("Kaenx.Konnect.dll").GetTypes()
                            where t.IsClass && t.IsNested == false && t.Namespace == "Kaenx.Konnect.Remote"
                            select t;

                    IRemoteMessage message = null;

                    foreach (Type t in q.ToList())
                    {
                        IRemoteMessage down = (IRemoteMessage)Activator.CreateInstance(t);
                        if (down != null && code == down.MessageCode)
                        {
                            message = down;
                            break;
                        }
                    }

                    if (message == null)
                    {
                        Debug.WriteLine("Unbekannte Nachricht: " + code);
                    }
                    try
                    {
                        message.Parse(buffer.Array.Take(result.Count).ToArray());
                    }
                    catch (Exception ex)
                    {
                    }

                    if (message is TunnelRequest && (message as TunnelRequest).Type == TunnelTypes.Connect)
                    {
                        TunnelRequest req = message as TunnelRequest;
                        KnxRemote rem     = new KnxRemote(Encoding.UTF8.GetString(req.Data), this);
                        await rem.Init(getUsbHandler);
                        int connId = await rem.ConnectToInterface(req);
                        Remotes.Add(connId, rem);
                        continue;
                    }


                    if (message.ToString().EndsWith("Response"))
                    {
                        Responses[message.SequenceNumber] = message;
                        OnResponse?.Invoke(message);
                    }
                    else
                    {
                        OnRequest?.Invoke(message);
                    }
                }

                Debug.WriteLine("Verbindung abgebrochen");
            });
        }
Exemplo n.º 29
0
        protected void WebsiteLife()
        {
            try
            {
                while (Listener.IsListening)
                {
                    HttpListenerContext context = Listener.GetContext();
                    Task.Factory.StartNew(() =>
                    {
                        Stream output = context.Response.OutputStream;

                        // GET Cookies
                        List <PanCookie> cookies = new List <PanCookie>();
                        foreach (Cookie c in context.Request.Cookies)
                        {
                            cookies.Add(new PanCookie(c.Name, c.Value, c.Path, c.Expires));
                        }

                        // GET Headers
                        Dictionary <string, string[]> headers = new Dictionary <string, string[]>();
                        System.Collections.Specialized.NameValueCollection cheaders = context.Request.Headers;
                        foreach (string key in cheaders.AllKeys)
                        {
                            string current_key     = key;
                            string[] currentvalues = cheaders.GetValues(current_key);
                        }

                        // GET Data
                        string url         = context.Request.RawUrl;        // Url
                        string method      = context.Request.HttpMethod;    // Method
                        Stream inputStream = new MemoryStream();            // Body
                        bool hasEntityBody = context.Request.HasEntityBody; // Has Entity Body
                        if (hasEntityBody)
                        {
                            context.Request.InputStream.CopyTo(inputStream);
                            inputStream.Position = 0;
                        }
                        string[] acceptTypes      = context.Request.AcceptTypes;     // Accept Types
                        Encoding contentEncoding  = context.Request.ContentEncoding; // Content Encoding
                        string contentType        = context.Request.ContentType;     // Content Type
                        bool isLocal              = context.Request.IsLocal;         // Is Local
                        string userAgent          = context.Request.UserAgent;       // User Agent
                        string[] userLanguages    = context.Request.UserLanguages;   // User Languages
                        IPEndPoint remoteEndPoint = context.Request.RemoteEndPoint;  // User IP
                        string userIP             = remoteEndPoint.Address.ToString();

                        PanRequest request   = new PanRequest(method, url, inputStream, cookies, hasEntityBody, acceptTypes, contentEncoding, contentType, headers, isLocal, userAgent, userLanguages, userIP);
                        PanResponse response = onRequest.Invoke(request);

                        // SET Code
                        int code = response.Code;
                        context.Response.StatusCode = code;

                        // SET
                        context.Response.ContentType = response.MIME;

                        // SET Cookies
                        if (response.Cookies == null)
                        {
                            response.Cookies = new List <PanCookie>();
                        }
                        foreach (PanCookie c in response.Cookies)
                        {
                            string cookie = "";
                            cookie       += (c.Name + "=" + (c.Value == null ? "" : c.Value));
                            if (c.Expires != null)
                            {
                                cookie += ("; Expires=" + c.Expires.ToString());
                            }
                            cookie += ("; Path=" + c.Path);
                            context.Response.Headers.Add("Set-Cookie", cookie);
                        }

                        response.OutputStream.CopyTo(output);
                        response.OutputStream.Close();
                        response.OutputStream.Dispose();
                        output.Close();
                        context.Response.Close();
                    });
                }
            }
            catch (ThreadAbortException ex)
            {
                //
            }
            catch (Exception ex)
            {
                throw new WebsiteException(ex);
            }
        }
Exemplo n.º 30
0
        private void _channel_OnReceive(Transporter arg1, MemoryStream data)
        {
            short id;

            if (!data.TryReadShort(out id))
            {
                HandleRequestProcessingError(
                    new ErrorMessage(
                        null, null,
                        ErrorType.SerializationError,
                        "Messae type id missed"), true);

                return;
            }
            InputMessageDeserializeInfo sayDeserializer;

            _inputSayMessageDeserializeInfos.TryGetValue(id, out sayDeserializer);
            if (sayDeserializer == null)
            {
                HandleRequestProcessingError(
                    new ErrorMessage(id, data.TryReadShort(),
                                     ErrorType.ContractSignatureError,
                                     $"Message type id {id} is not implemented"), false);
                return;
            }

            short?askId = null;

            if (id < 0 || sayDeserializer.HasReturnType)
            {
                askId = data.TryReadShort();
                if (!askId.HasValue)
                {
                    HandleRequestProcessingError(
                        new ErrorMessage(
                            id, null,
                            ErrorType.SerializationError,
                            "Ask Id missed"), true);
                    return;
                }
            }
            object[] deserialized;

            try
            {
                deserialized = sayDeserializer.Deserialize(data);
            }
            catch (Exception ex)
            {
                if (id < 0)
                {
                    //Answer deserialization failed. Send LocalSerializerException to upper layer as result of the ASK call
                    OnException?.Invoke(
                        this,
                        new LocalSerializationException(id, askId, "Answer deserialization failed: " + ex.Message, ex));
                    _channel.Disconnect();
                    return;
                }
                HandleRequestProcessingError(
                    new ErrorMessage(
                        id, askId,
                        ErrorType.SerializationError,
                        $"Message type id{id} with could not be deserialized. InnerException: {ex.ToString()}"), true);
                return;
            }

            if (id < 0)
            {
                //input answer message handling
                OnAns?.Invoke(this, id, askId.Value, deserialized.Single());
            }
            else if (id == Messenger.ExceptionMessageTypeId)
            {
                var exceptionMessage = (ErrorMessage)deserialized.First();
                if (exceptionMessage.Exception.IsFatal)
                {
                    _channel.DisconnectBecauseOf(exceptionMessage);
                }
                OnException?.Invoke(this, exceptionMessage.Exception);
            }
            else
            {
                //input ask / say messageHandling
                OnRequest?.Invoke(this, new RequestMessage(id, askId, deserialized));
            }
        }