Jump to content

Settings question


Pudge

Recommended Posts

Hi all, i using class robotManager methods.Helpful.Settings for 
for communication wrobot windows on same PC.
Very often in log i see the error like "Serialize(String path, object @object)#3: Cannot write file." when calling a method robotManager methods.Helpful.Settings .Save(). How can I avoid this?

Link to comment
Share on other sites

3 hours ago, Droidz said:

I cant understand why file not owerwriting. Whot i need to change to unlock file. File with settings using at same time by 10+ wrobot windows, but error does not always appear. is there an option to 100% unlock the file before saving?

Link to comment
Share on other sites

Unless you are going to reread all the commands between two clients, its bad practice to write to file to read then just to reread, You should use something like a server to talk together. 

Link to comment
Share on other sites

You can try to host http server in relogger (with relogger plugin) (you can get/return values (or xml) from it.

It's sample of http server, but for wrobot plugin :

using System.Net;
using System.Text;
using System.Threading.Tasks;
using robotManager.Helpful;
using wManager.Wow.Helpers;
using wManager.Wow.ObjectManager;

public class Main : wManager.Plugin.IPlugin
{
    /*
     Samples:
http://localhost:8000/name
http://localhost:8000/jump
http://localhost:8000/pos
http://localhost:8000/runlua?code=print(%22test%20from%20web%22)
     */
    private readonly bool _debugLog = true;
    private HttpListener _listener;
    private readonly string _url = "http://localhost:8000/";
    private int _requestCount;
    private bool _runServer;

    public void Initialize()
    {
        // Create a Http server and start listening for incoming connections
        _listener = new HttpListener();
        _listener.Prefixes.Add(_url);
        _listener.Start();
        if (_debugLog)
            Logging.WriteDebug("Listening for connections on " + _url);

        // Handle requests
        var listenTask = HandleIncomingConnections();
        listenTask.GetAwaiter().GetResult();
    }

    public void Dispose()
    {
        if (_listener != null)
        {
            _runServer = false;
            _listener.Close();
            _listener = null;
        }
    }

    public void Settings()
    {
    }

    private async Task HandleIncomingConnections()
    {
        _runServer = true;

        // While a user hasn't visited the `shutdown` url, keep on handling requests
        while (_runServer)
        {
            // Will wait here until we hear from a connection
            var ctx = await _listener.GetContextAsync();

            // Peel out the requests and response objects
            var req = ctx.Request;
            var resp = ctx.Response;

            // Print out some info about the request
            if (_debugLog)
            {
                Logging.WriteDebug("Request #: " + ++_requestCount);
                Logging.WriteDebug(req.Url.ToString());
                Logging.WriteDebug(req.HttpMethod);
                Logging.WriteDebug(req.UserHostName);
                Logging.WriteDebug(req.UserAgent);
                Logging.WriteDebug(req.Url.AbsolutePath);
            }

            var content = string.Empty;
            // Parse
            if (req.Url.AbsolutePath == "/name")
            {
                content = ObjectManager.Me.Name;
            }
            else if (req.Url.AbsolutePath == "/jump")
            {
                Move.JumpOrAscend();
                content = "done";
            }
            else if (req.Url.AbsolutePath == "/pos")
            {
                content = ObjectManager.Me.Position.ToStringXml();
            }
            else if (req.Url.AbsolutePath.StartsWith("/runlua"))
            {
                //var r = System.Web.HttpUtility.ParseQueryString(req.Url.Query).Get("code");
                var r = req.QueryString["code"];
                if (!string.IsNullOrWhiteSpace(r))
                {
                    Lua.LuaDoString(r);
                    content = "ok";
                }
                else
                    content = "failed";
            }

            // Write the response info
            byte[] data = Encoding.UTF8.GetBytes(content);
            resp.ContentType = "text/html";
            resp.ContentEncoding = Encoding.UTF8;
            resp.ContentLength64 = data.LongLength;

            // Write out to the response stream (asynchronously), then close it
            await resp.OutputStream.WriteAsync(data, 0, data.Length);
            resp.Close();
        }
    }
}

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...