Jump to content

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
https://wrobot.eu/forums/topic/14775-settings-question/
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
https://wrobot.eu/forums/topic/14775-settings-question/#findComment-66691
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
https://wrobot.eu/forums/topic/14775-settings-question/#findComment-66742
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...