|
|
- using System.Collections;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using UnityEngine;
- using System.Net;
- using System.Text;
- using System.IO;
-
- public class BrowserServer : MonoBehaviour
- {
-
- [SerializeField]
- [Tooltip("Local Path in Streaming Assets")]
- private string LocalPath;
-
- [SerializeField]
- [Tooltip("Site to redirect to if android")]
- private string redirectSite;
-
- [SerializeField]
- [Tooltip("Browsers by default use 80")]
- private int port = 80;
-
- SimpleHTTPServer server;
-
- // Start is called before the first frame update
- void Start()
- {
- server = new SimpleHTTPServer(Path.Combine(Application.streamingAssetsPath,LocalPath),port);
- }
-
- private void OnDisable()
- {
- server.Stop();
- }
-
- private void StartServer()
- {
- if (!HttpListener.IsSupported)
- {
- Debug.LogWarning("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
- return;
- }
-
- string responseString = "<html><body><h1>Error Connecting to server</h1></body></html>";
-
-
-
- // Create a listener.
- HttpListener server = new HttpListener();
- // Add the prefixes.
-
-
- server.Prefixes.Add("http://*:" + port.ToString() + "/");
- server.Start();
- Debug.Log(" HTML Listening...");
-
- // while (enabled)
- // {
- HttpListenerContext context = server.GetContext();
- HttpListenerResponse response = context.Response;
-
-
- string page = Path.Combine(Application.streamingAssetsPath, LocalPath, context.Request.Url.LocalPath);
- Debug.Log("Client asked for: " + context.Request.Url.LocalPath);
- if (page.EndsWith("/"))
- page += "index.html";
-
- Debug.Log("Client asked for: " + page);
-
- if (page == string.Empty)
- page = "index.html";
-
- try
- {
- TextReader tr = new StreamReader(page);
- string msg = tr.ReadToEnd();
- byte[] buffer = Encoding.UTF8.GetBytes(msg);
-
- response.ContentLength64 = buffer.Length;
- Stream st = response.OutputStream;
- st.Write(buffer, 0, buffer.Length);
- }
- catch (IOException e)
- {
- Debug.LogError(e);
- }
-
-
-
- context.Response.Close();
- //}
-
- server.Stop();
- Task.Run(() => StartServer());
- }
-
- private void Respond(HttpListenerContext context)
- {
-
- string responseString = "<html><body><h1>Error Connecting to server</h1></body></html>";
- try
- {
- responseString = System.IO.File.ReadAllText(Path.Combine(Application.streamingAssetsPath, LocalPath, context.Request.Url.LocalPath));
- Debug.Log(responseString);
- }
- catch (System.IO.IOException e)
- {
- Debug.LogError(e);
- }
-
- HttpListenerRequest request = context.Request;
- // Obtain a response object.
- HttpListenerResponse response = context.Response;
- // Construct a response.
-
- byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
- // Get a response stream and write the response to it.
- response.ContentLength64 = buffer.Length;
- System.IO.Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- // You must close the output stream.
- output.Close();
- }
-
- }
|