131 lines
3.9 KiB
C#
131 lines
3.9 KiB
C#
//
|
|
// This script serves as a basis for new scripts. New scripts can copy this
|
|
// source file to start out.
|
|
//
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
using System.Reflection;
|
|
using System.Reflection.Emit;
|
|
using CLRScriptFramework;
|
|
using NWScript;
|
|
using NWScript.ManagedInterfaceLayer.NWScriptManagedInterface;
|
|
|
|
using NWEffect = NWScript.NWScriptEngineStructure0;
|
|
using NWEvent = NWScript.NWScriptEngineStructure1;
|
|
using NWLocation = NWScript.NWScriptEngineStructure2;
|
|
using NWTalent = NWScript.NWScriptEngineStructure3;
|
|
using NWItemProperty = NWScript.NWScriptEngineStructure4;
|
|
|
|
using System.Threading;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace CLRScript
|
|
{
|
|
public partial class nwn2ai_onmoduleload : CLRScriptBase, ICLRScriptImplementation, IGeneratedScriptProgram
|
|
{
|
|
|
|
public nwn2ai_onmoduleload([In] NWScriptJITIntrinsics Intrinsics, [In] INWScriptProgram Host)
|
|
{
|
|
InitScript(Intrinsics, Host);
|
|
}
|
|
|
|
private nwn2ai_onmoduleload([In] nwn2ai_onmoduleload Other)
|
|
{
|
|
InitScript(Other);
|
|
|
|
LoadScriptGlobals(Other.SaveScriptGlobals());
|
|
}
|
|
|
|
//
|
|
// Include the list of types for parameters to the main function here.
|
|
// An empty list means no parameters.
|
|
//
|
|
public static Type[] ScriptParameterTypes = { };
|
|
|
|
|
|
|
|
StreamWriter debugFile;
|
|
public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode)
|
|
{
|
|
debugFile = File.AppendText("nwnx4\\customlog.txt");
|
|
Debug("====================================> Start");
|
|
|
|
sockBufferIn = new Queue<string>();
|
|
sockClients = new Dictionary<string,Socket>();
|
|
SocketConfigure();
|
|
|
|
AssignCommand(OBJECT_SELF, delegate() { ActionSpeakString("Start!", TALKVOLUME_TALK); });
|
|
DelayCommand(0.5f, Heartbeat);
|
|
|
|
return DefaultReturnCode;
|
|
}
|
|
|
|
public void Heartbeat()
|
|
{
|
|
ActionSpeakString("hb", TALKVOLUME_TALK);
|
|
DelayCommand(0.5f, Heartbeat);
|
|
|
|
//Process queued requests
|
|
}
|
|
|
|
|
|
void SocketConfigure()
|
|
{
|
|
sockServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8080);
|
|
sockServer.Bind(iep);
|
|
sockServer.Listen(10);
|
|
|
|
sockThread = new Thread(new ThreadStart(SocketHandler));
|
|
sockThread.Start();
|
|
}
|
|
|
|
void SocketHandler()
|
|
{
|
|
while(true){
|
|
Debug("Accepting");
|
|
//Socket sockClient = sockServer.Accept();
|
|
sockServer.BeginAccept(new AsyncCallback(RequestHandler), sockServer);
|
|
}
|
|
}
|
|
|
|
void RequestHandler(IAsyncResult state)
|
|
{
|
|
Debug("Connection received");
|
|
//Socket listener = (Socket)state.AsyncState;
|
|
//Socket handler = listener.EndAccept(state);
|
|
//Socket sockClient = sockServer.EndAccept(state);
|
|
//Debug("Connection Accepted");
|
|
|
|
//byte[] rawLength = new byte[4];
|
|
//sockClient.Receive(rawLength);
|
|
|
|
//int length = rawLength[0]<<8 + rawLength[1];
|
|
//byte[] rawData = new byte[length];
|
|
//sockClient.Receive(rawData);
|
|
//string data = Encoding.UTF8.GetString(rawData);
|
|
//Debug("got data: "+data);
|
|
//sockBufferIn.Enqueue(data);
|
|
}
|
|
|
|
Socket sockServer;
|
|
Thread sockThread;
|
|
Queue<string> sockBufferIn;
|
|
|
|
//PNJ tag => Client socket
|
|
Dictionary<string, Socket> sockClients;
|
|
|
|
private void Debug(string msg){
|
|
debugFile.WriteLine(DateTime.Now.ToLongTimeString()+": "+msg);
|
|
debugFile.Flush();
|
|
}
|
|
}
|
|
}
|