示例#1
0
        /// <summary>
        /// A void function called whenever a response has been received.
        /// </summary>
        /// <param name="req">The request object.</param>
        /// <param name="resp">The response object.</param>
        /// <param name="log">A logger representing the log.</param>
        private void TestRESTAPI_ResponseReceived(System.Net.HttpListenerRequest req, System.Net.HttpListenerResponse resp, Logger log)
        {
            log.Log(LogLevel.INFORMATION, "REST ApiTest: Got request, responding");
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("{\"success\": \"true\"}"));

            ms.CopyTo(resp.OutputStream);
            ms.Close();
            resp.Close();
        }
示例#2
0
        static void ResponseWrite(string type, string msg, System.Net.HttpListenerResponse response)
        {
            response.ContentType = "application/json;charset=UTF-8";
            response.AddHeader("Content-type", "application/json");//添加响应头信息
            response.Headers.Add("Access-Control-Allow-Origin", "*");
            response.ContentEncoding   = Encoding.UTF8;
            response.StatusCode        = 200;
            response.StatusDescription = "200";

            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg);
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;

            output.Write(buffer, 0, buffer.Length);
            output.Close();
            response.Close();
        }
示例#3
0
文件: Program.cs 项目: FJB2784/NFC
        static void Main(string[] args)
        {
            try
            {
                System.Net.HttpListener server = new System.Net.HttpListener();
                // Address, Port を指定
                server.Prefixes.Add("http://localhost:8000/");
                // サーバ起動
                server.Start();

                while (true)
                {
                    // 接続待ち
                    System.Net.HttpListenerContext context = server.GetContext();

                    // 応答作成
                    System.Net.HttpListenerResponse response = context.Response;
                    // JavaScriptエラー回避
                    response.Headers.Add("Access-Control-Allow-Origin", "*");

                    bool   readSuccess = false;
                    byte[] idm         = null;

                    if (System.Text.RegularExpressions.Regex.IsMatch(context.Request.Url.ToString(), "http://localhost:8000/getIDmDummy\\?seed=.*"))
                    {
                        // 疑似IDm生成
                        idm         = IDmDummy(context.Request.QueryString.Get("seed"));
                        readSuccess = true;

                        Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\t疑似IDm生成");
                    }
                    else
                    {
                        try
                        {
                            // NFC読み込み
                            Felica felica = new Felica();
                            felica.Polling((int)SystemCode.FelicaLiteS);
                            idm = felica.IDm();
                            felica.Dispose();

                            readSuccess = true;

                            Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\tカード読み取り成功");
                        }
                        catch
                        {
                            Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\tカード読み取り失敗");
                        }
                    }

                    if (readSuccess)
                    {
                        // 読み取り成功
                        string idm_str = BitConverter.ToString(idm).Replace("-", "").ToLower();
                        idm = Encoding.UTF8.GetBytes(idm_str);

                        response.StatusCode = 200;
                        response.OutputStream.Write(idm, 0, idm.Length);
                        response.Close();
                    }
                    else
                    {
                        // 読み取り失敗
                        response.StatusCode = 500;
                        response.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
示例#4
0
        public void Run()
        {
            if (!IsConnectedToInternet())
            {
                System.Console.WriteLine("Not connected to a network");
                return;
            }

            bool useLocalIP = true;

            if (!TryConnectLocalIP())
            {
                useLocalIP = false;
                System.Console.WriteLine("Could not connect through local IP address");
            }

            System.Console.WriteLine("Connect using {0}", baseUrl.TrimEnd('/'));
            if (useLocalIP)
            {
                System.Console.WriteLine("Connect using {0}", ExternalUrl.TrimEnd('/'));
            }

            using (var listener = new System.Net.HttpListener())
            {
                listener.Prefixes.Add(baseUrl);
                if (useLocalIP)
                {
                    listener.Prefixes.Add(ExternalUrl);
                }

                listener.Start();
                while (true)
                {
                    System.Net.HttpListenerContext ctx     = listener.GetContext();
                    System.Net.HttpListenerRequest request = ctx.Request;
                    System.Console.WriteLine(request.Url);

                    System.Net.HttpListenerResponse response = ctx.Response;

                    string urlString = request.Url.ToString();
                    string rawUrl    = request.RawUrl.ToString();

                    string responseText = null;

                    byte[] reponseBuffer = null;
                    if (rawUrl == root)
                    {
                        responseText         = defaultPage;
                        responseText         = responseText.Replace(baseUrl, urlString + "/");
                        response.ContentType = "text/HTML";
                    }
                    else if (rawUrl.StartsWith(WebService.resourcePrefix))
                    {
                        string resourceName = rawUrl.Remove(0, WebService.resourcePrefix.Length);
                        if (rawUrl.EndsWith(".jpg"))
                        {
                            reponseBuffer        = Program.GetEmbeddedContentAsBinary(resourceName);
                            response.ContentType = System.Net.Mime.MediaTypeNames.Image.Jpeg;
                        }
                        else
                        {
                            responseText         = Program.GetEmbeddedContent(resourceName);
                            response.ContentType = "text/css";
                        }
                    }
                    else if (rawUrl.StartsWith(root + "/"))
                    {
                        var streamReader = new System.IO.StreamReader(request.InputStream, request.ContentEncoding);
                        var jsonRequest  = streamReader.ReadToEnd();

                        string requestedPage      = rawUrl.Remove(0, (root + "/").Length);
                        object unserializedObject = null;

                        Type serviceType;
                        if (mapNameToServiceType.TryGetValue(requestedPage, out serviceType))
                        {
                            unserializedObject = js.Deserialize(jsonRequest, serviceType);
                            if (unserializedObject == null)
                            {
                                unserializedObject = Activator.CreateInstance(serviceType);
                            }
                        }
                        else
                        {
                            System.Console.WriteLine("Unrecognized Service");
                        }

                        if (unserializedObject is IRequestWithHtmlResponse)
                        {
                            responseText = ((IRequestWithHtmlResponse)unserializedObject).GetResponse(this);
                        }
                        else if (unserializedObject is IRequestWithJsonResponse)
                        {
                            object o          = ((IRequestWithJsonResponse)unserializedObject).GetResponse(this);
                            var    serialized = js.Serialize(o);
                            responseText = serialized;
                        }
                        response.ContentType = "text/html";
                    }

                    if (response.ContentType != null && response.ContentType.StartsWith("text") && responseText != null)
                    {
                        response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
                        reponseBuffer            = System.Text.Encoding.UTF8.GetBytes(responseText);
                    }

                    if (reponseBuffer != null)
                    {
                        //These headers to allow all browsers to get the response
                        response.Headers.Add("Access-Control-Allow-Credentials", "true");
                        response.Headers.Add("Access-Control-Allow-Origin", "*");
                        response.Headers.Add("Access-Control-Origin", "*");

                        //response.StatusCode = 200;
                        //response.StatusDescription = "OK";
                        // Get a response stream and write the response to it.
                        response.ContentLength64 = reponseBuffer.Length;
                        System.IO.Stream output = response.OutputStream;
                        output.Write(reponseBuffer, 0, reponseBuffer.Length);
                        output.Close();
                    }
                    response.Close();
                }
            }
        }