You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

122 lines
3.3 KiB

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("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();
}
}