Skip to content
This repository has been archived by the owner on Nov 19, 2022. It is now read-only.

Creating a Data Request

brian barnes edited this page Apr 3, 2018 · 4 revisions

What is a Data Request

A data request is an operation that requires the user provide additional data to the server.

Requesting Data

In order to request data, you must have the following information ready:

  • The URI (Unique Request Interface). This is the name that identifies which request you want to use. For example, if you want to show a menu to the user, you would use the rcmd_smenu URI.
  • The Message: This will be the message the user sees when the request is sent.
  • Arguments: The data that will be used to build the request (Like the options in a menu)
  • The Metadata: Any additional settings that will be passed to the client (Menu option color, background color, etc.) Most of these things you don't need to mess around, because there are libraries that abstract these details.

Making a Request

In order to make a data Request, execute this line of code:

Dictionary<string, string> arguments = new Dictionary<string, string>();
arguments.Add("1", "Exit");
Dictionary<string, string> metadata = new Dictionary<string, string>();
metadata.Add("HeaderBackColor", "Green");
RemotePlusLibrary.RequestBuilder builder = new RemotePlusLibrary.RequestBuilder("rcmd_smenu", "Please select an option.", arguments);
RemotePlusLibrary.ReturnData data = ServerManager.DefaultService.Remote.Client.ClientCallback.RequestInformation(builder);
Console.WriteLine(data.Data.ToString());

Creating a Data Request

In order to build a data request, you must follow these steps:

  1. Create a class and implement IDataRequest
  2. Register the request into the global request store on the client

We are going to build a data request that forces a user to select a file.

1. Create a class

A request is just a class that implements the IDataRequest interface. Here is a basic framework:

using RemotePlusLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClientTools
{
    public class ExampleRequest : IDataRequest
    {
        public bool ShowProperties => false;

        public string FriendlyName => "Example Request";

        public string Description => "A request that shows a show file dialog.";

        public RawDataRequest RequestData(RequestBuilder builder)
        {
            throw new NotImplementedException();
        }

        public void Update(string message)
        {
            throw new NotImplementedException();
        }

        public void UpdateProperties()
        {
            throw new NotImplementedException();
        }
    }
}
  • The ShowProperties property determines whether a user can access saved settings for this request. This feature has been deprecated.
  • FriendlyName is what is shown in the list of all registered requests in the request store.
  • Description is what the request does. It is shown in the list of all registired requests in the request store.
  • RequestData(RequestBuilder builder) is called when the server requests data from the client. The RequestBuilder class contains all the data required to build a request.
  • Update(string message) is called when a server needs to update a request about a certain activity.
  • UpdateProperties() is called when a user wants to update a request's settings and ShowProperties is true

Here is when the request class is finished:

using RemotePlusLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ClientTools
{
    public class FileRequest : IDataRequest
    {
        public bool ShowProperties => false;

        public string FriendlyName => "File Request";

        public string Description => "A request that shows a show file dialog.";

        public RawDataRequest RequestData(RequestBuilder builder)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = builder.Message;
            if(builder.Metadata.ContainsKey("Filter"))
            {
                ofd.Filter = builder.Metadata["Filter"];
            }
            if(ofd.ShowDialog() == DialogResult.OK)
            {
                RawDataRequest response = RawDataRequest.Success(ofd.FileName);
                return response;
            }
            else
            {
                return RawDataRequest.Cancel();
            }
        }

        public void Update(string message)
        {
            throw new NotImplementedException();
        }

        public void UpdateProperties()
        {
            throw new NotImplementedException();
        }
    }
}

2. Register the request into the global request store.

In your client extension library's Startup.cs file, add the following lines of code:

using RemotePlusClient.ExtensionSystem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RemotePlusLibrary.Extension;
using RemotePlusClient.CommonUI;

namespace ClientTools
{
    public class Startup : IClientLibraryStartup
    {
        public void ClientInit(ILibraryBuilder builder, IInitEnvironment env)
        {
            RequestStore.Add("fileRequest", new FileRequest());
        }
    }
}

RequestStore.Add contains two parameters:

  1. The URI (Unique Request Interface).
  2. The request.

Before running a command that uses your new request, make sure that the client extension library is loaded first.