ict.lixian.three/Assets/Scripts/cxx/MyServer.cs

334 lines
9.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp.Server;
using System;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
public class MyServer : MonoBehaviour
{
public static MyServer instance;
public static string version = "1.0";
WebSocketServer wss;
HttpListener httpobj;
[HideInInspector]
public Queue<JObject> reciveData = new Queue<JObject>();
Action<JObject> handleFun_szr = null;
Action<JObject> handleFun_jqr = null;
Action<JObject> handleFun_wrj = null;
Action<JObject> handleFun_other = null;
[HideInInspector]
public ServerHandler handler = null;
public Queue<string> console_log_message = new Queue<string>();
public Queue<string> console_warning_message = new Queue<string>();
public Queue<string> console_error_message = new Queue<string>();
private void Awake()
{
instance = this;
}
private void Start()
{
StartWebsocketServer(10088);
//StartWebsocketServer(6001);
//StartHttpServer(10089);
}
private void OnDestroy()
{
StopWebsocketServer();
}
private void Update()
{
if (reciveData.Count > 0)
{
int count = reciveData.Count;
for (int i = 0; i < count; i++)
{
if (reciveData.TryDequeue(out JObject result))
{
if (result["type"].ToString() == "szr")
{
if (handleFun_szr != null)
handleFun_szr(result);
}
else if (result["type"].ToString() == "jqr")
{
if (handleFun_jqr != null)
handleFun_jqr(result);
}
else if (result["type"].ToString() == "wrj")
{
if (handleFun_wrj != null)
handleFun_wrj(result);
}
else
{
if (handleFun_other != null)
handleFun_other(result);
}
}
}
}
if (console_log_message.Count > 0)
{
Console(console_log_message.Dequeue());
}
if (console_warning_message.Count > 0)
{
Console(console_log_message.Dequeue(), "warning");
}
if (console_error_message.Count > 0)
{
Console(console_log_message.Dequeue(), "error");
}
}
void StartA()
{
Debug.Log("<22><><EFBFBD>óɹ<C3B3>");
//handleFun_szr
}
void Console(string _message, string _type = "log")
{
if (ConsolePanel.Instance != null)
ConsolePanel.ConsoleOutput(_message, _type);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
/// </summary>
/// <param name="port"></param>
private void StartWebsocketServer(int port)
{
try
{
string text = "ws://0.0.0.0:" + port;
//string text = "ws://172.16.1.17:10088";
wss = new WebSocketServer(text);
wss.AddWebSocketService<ServerHandler>("/cxx");
wss.KeepClean = false;
wss.Start();
Debug.Log("<22><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF>" + port);
}
catch (Exception ex)
{
Debug.LogError(ex.Message);
}
}
/// <summary>
/// <20>ر<EFBFBD><D8B1><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
/// </summary>
private void StopWebsocketServer()
{
if (wss != null)
{
wss.RemoveWebSocketService("/cxx");
wss.Stop();
wss = null;
Debug.Log("<22>رռ<D8B1><D5BC><EFBFBD>");
}
}
/*
#region http
private void StartHttpServer(int port)
{
httpobj = new HttpListener();
//<2F><><EFBFBD><EFBFBD>url<72><6C><EFBFBD>˿ںţ<DABA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
httpobj.Prefixes.Add("http://127.0.0.1:" + port + "/cxx/");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
httpobj.Start();
//<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬵<EFBFBD><F3A3ACB5>ͻ<EFBFBD><CDBB>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>Resultί<74><CEAF>
//<2F><>ί<EFBFBD><CEAF>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>IAsyncResult<6C>ӿڵIJ<DAB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ȡcontext<78><74><EFBFBD><EFBFBD>
httpobj.BeginGetContext(Result, null);
Debug.Log("httpserver <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
private void StopHttpServer()
{
}
*/
private void Result(IAsyncResult ar)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
httpobj.BeginGetContext(Result, null);
var guid = Guid.NewGuid().ToString();
Debug.Log($"<22>ӵ<EFBFBD><D3B5>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>:{guid},ʱ<>䣺{DateTime.Now.ToString()}");
//<2F><><EFBFBD><EFBFBD>context<78><74><EFBFBD><EFBFBD>
var context = httpobj.EndGetContext(ar);
var request = context.Request;
var response = context.Response;
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>js<6A><73>ajax<61><78><EFBFBD>󣬻<EFBFBD><F3A3ACBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ip<69><70>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//context.Response.AppendHeader("Access-Control-Allow-Origin", "*");//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
//context.Response.AppendHeader("Access-Control-Allow-Headers", "ID,PW");//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
//context.Response.AppendHeader("Access-Control-Allow-Method", "post");//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
context.Response.ContentType = "text/plain;charset=UTF-8";//<2F><><EFBFBD>߿ͻ<DFBF><CDBB>˷<EFBFBD><CBB7>ص<EFBFBD>ContentType<70><65><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪUTF-8
context.Response.AddHeader("Content-type", "text/plain");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<D3A6><CDB7>Ϣ
context.Response.ContentEncoding = Encoding.UTF8;
string returnObj = null;//<2F><><EFBFBD><EFBFBD>ؿͻ<D8BF><CDBB>˵<EFBFBD><CBB5><EFBFBD>Ϣ
if (request.HttpMethod == "POST" && request.InputStream != null)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>󲢷<EFBFBD><F3B2A2B7>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
returnObj = HandleRequest(request, response);
}
else
{
returnObj = $"<22><><EFBFBD><EFBFBD>post<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>";
}
var returnByteArr = Encoding.UTF8.GetBytes(returnObj);//<2F><><EFBFBD>ÿͻ<C3BF><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
try
{
using (var stream = response.OutputStream)
{
//<2F>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ص<EFBFBD><D8B5>ͻ<EFBFBD><CDBB><EFBFBD>
stream.Write(returnByteArr, 0, returnByteArr.Length);
}
}
catch (Exception ex)
{
Debug.LogError($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>{ex.ToString()}");
}
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>{guid},ʱ<>䣺{DateTime.Now.ToString()}\r\n");
}
private string HandleRequest(HttpListenerRequest request, HttpListenerResponse response)
{
string data = null;
try
{
var byteList = new List<byte>();
var byteArr = new byte[2048];
int readLen = 0;
int len = 0;
//<2F><><EFBFBD>տͻ<D5BF><CDBB>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
do
{
readLen = request.InputStream.Read(byteArr, 0, byteArr.Length);
len += readLen;
byteList.AddRange(byteArr);
} while (readLen != 0);
data = Encoding.UTF8.GetString(byteList.ToArray(), 0, len);
//<2F><>ȡ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>data<74><61><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
catch (Exception ex)
{
response.StatusDescription = "404";
response.StatusCode = 404;
Debug.LogError($"<22>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:{ex.ToString()}");
return $"<22>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:{ex.ToString()}";//<2F>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>Ϣֱ<CFA2>ӷ<EFBFBD><D3B7>ؿ<EFBFBD><D8BF>ܻᵼ<DCBB><E1B5BC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD>
}
response.StatusDescription = "200";//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ظ<EFBFBD><D8B8>ͻ<EFBFBD><CDBB>˵<EFBFBD> HTTP ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
response.StatusCode = 200;// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ظ<EFBFBD><D8B8>ͻ<EFBFBD><CDBB>˵<EFBFBD> HTTP ״̬<D7B4><CCAC><EFBFBD>
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:{data.Trim()},ʱ<>䣺{DateTime.Now.ToString()}");
return $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
//#endregion
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="handlerFun">json<6F><6E><EFBFBD><EFBFBD>Ϣһ<CFA2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>int eventid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64>,string commond ָ<><D6B8> </param>
public void SetHandler_szr(Action<JObject> handlerFun)
{
handleFun_szr = handlerFun;
}
/// <summary>
/// <20><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="handlerFun">json<6F><6E><EFBFBD><EFBFBD>Ϣһ<CFA2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>int eventid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64>,string commond ָ<><D6B8> </param>
public void SetHandler_jqr(Action<JObject> handlerFun)
{
handleFun_jqr = handlerFun;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="handlerFun">json<6F><6E><EFBFBD><EFBFBD>Ϣһ<CFA2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>int eventid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64>,string commond ָ<><D6B8> </param>
public void SetHandler_wrj(Action<JObject> handlerFun)
{
handleFun_wrj = handlerFun;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="handlerFun">json<6F><6E><EFBFBD><EFBFBD>Ϣһ<CFA2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>int eventid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64>,string commond ָ<><D6B8> </param>
public void SetHandler_other(Action<JObject> handlerFun)
{
handleFun_other = handlerFun;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2> (<28><>ȫ<EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ֶ<EFBFBD>)
/// </summary>
/// <param name="msg">json<6F><6E>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>Ϣʱ<CFA2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ֶΣ<D6B6>int eventid(<28>ظ<EFBFBD>id),ResultState result<6C><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,string msg<73><67>ʧ<EFBFBD><CAA7><EFBFBD>ֶΣ<D6B6></param>
public void SendMsgToSDK(string msg)
{
if (handler != null)
{
handler.SendMsg(msg);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>(<28><><EFBFBD>װ棬ֻ<E6A3AC><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>)
/// </summary>
/// <param name="event_id"></param>
/// <param name="result"></param>
/// <param name="msg"></param>
public void SendMsgToSDK(int event_id, ResultStatus result, string msg = null)
{
if (result != ResultStatus.SUCCESS && msg == null)
{
Debug.LogError(<>ܱ<EFBFBD><DCB1>봫ԭ<EBB4AB><D4AD>");
}
else
{
if (handler != null)
{
handler.SendMsg(JsonConvert.SerializeObject(new { event_id = event_id, result = result, msg = msg == null ? "" : msg }));
}
}
}
}
/// <summary>
/// <20>ظ<EFBFBD><D8B8>ļ<EFBFBD><C4BC><EFBFBD>
/// </summary>
public enum ResultStatus
{
SUCCESS = 1,
/// <summary>
/// <20>˲<EFBFBD><CBB2><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
FAILED_WARNING = 2,
/// <summary>
/// <20>˲<EFBFBD><CBB2><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
/// </summary>
FAILED_ERROR = 3
}