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]
private string HTMLPath;
[SerializeField]
private int port;
SimpleHTTPServer server;
// Start is called before the first frame update
void Start()
{
server = new SimpleHTTPServer(HTMLPath, 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 = "
Error Connecting to server
";
// 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 = HTMLPath + 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 = "Error Connecting to server
";
try
{
responseString = System.IO.File.ReadAllText(HTMLPath);
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();
}
}