Jump to content

Global variable associated with the license key


Pudge
 Share

Recommended Posts

 

Hello, @Droidz, there is an urgent need to control bots on two or more different machines, in wrobot have api API robotManager.Helpful.Var that allows you to create variables for communication within one bot program,I know that bots can read variables from an xml document on one computer to communicate, but how to do something like that so that bots on different PCs can transfer information to each other is not yet clear to me. It would be cool if you add such an api you can add or suggest how you can implement a variable so that bots can read it from different computer machines.

Link to comment
Share on other sites

Hi,

I wrote few time ago sample HTTP server plugin: Test server http.cs

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

You can use one port by bot.

 

But in any case what you want to do require programming knowledge. You can also create one server with API type REST to store data (with C# or more easy tools like  python or nodejs), and use this API with bot plugin. You have a lot of possibility, but I can't add it to the bot API.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...