Example Usage

Once that setup has been completed, you can very easily call all the necessary API requests to connect to a cloudlet with your application deployed. Here is some example code using the MobiledgeXIntegration class that comes with the package:

Getting Edge Connection Url

MobiledgeX SDK uses the device Location and the device's MCC-MNC if avaliable (https://developers.mobiledgex.com/getting-started/connecting-client-app#distributed-matching-engine) to connect you to the closest Edge cloudlet where you application instance is deployed.

If your carrier is not supported yet by MobiledgeX the SDK will throw a DmeDnsException. You can catch this exception and instead use WifiOnly(true) to connect to the wifi dme which will connect you to the closest regional DME.

using MobiledgeX;
using DistributedMatchEngine;
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(MobiledgeX.LocationService))]
public class YourClassName : MonoBehaviour
{
IEnumerator Start()
{
yield return StartCoroutine(MobiledgeX.LocationService.EnsureLocation()); // Location is needed to connect you to the closet edge
GetEdgeConnection();
}
async void GetEdgeConnection()
{
MobiledgeXIntegration mxi = new MobiledgeXIntegration();
try
{
await mxi.RegisterAndFindCloudlet();
}
catch(DmeDnsException)
{
mxi.UseWifiOnly(true); // if you carrier is not supported yet, WifiOnly will connect you to wifi.dme
await mxi.RegisterAndFindCloudlet();
}
mxi.GetAppPort(LProto.L_PROTO_HTTP); // Get the port of the desired protocol
string url = mxi.GetUrl("http"); // Get the url of the desired protocol
}
}
Definition: LocationService.cs:29
static IEnumerator EnsureLocation()
EnsureLocation Confirm that user location is valid, user location is essential for MobiledgeX service...
Definition: LocationService.cs:51
Definition: CarrierInfoIntegration.cs:27

If your device doesn't have MCC-MNC ID (no sim card - for ex. Oculus device), Please use UseWifiOnly before RegisterAndFindCloudlet.

use mxi.UseWifiOnly(true);
await mxi.RegisterAndFindCloudlet();

In UnityEditor

While developing in Unity Editor (Location is not used), the fallback location by default is San Jose, CA.

If you wish to change the fallback Location, use SetFallbackLocation() before you call RegisterAndFindCloudlet().

mxi.SetFallbackLocation(testLongtiude, testLatitude);
await mxi.RegisterAndFindCloudlet();

By default in Unity Editor you will connect with the Wifi DME, which is specified using the TestCarrierInfoClass in the CarrierInfoIntegration script.

REST Example

For full example code, Please check RunTime/Scripts/ExampleRest.cs

async void GetEdgeConnection()
{
MobiledgeXIntegration mxi = new MobiledgeXIntegration();
await mxi.RegisterAndFindCloudlet();
mxi.GetAppPort(LProto.L_PROTO_HTTP); // Get the port of the desired protocol
string url = mxi.GetUrl("http"); // Get the url of the desired protocol
StartCoroutine(RestExample(url)); // using UnityWebRequest
RestExampleHttpClient(url); // using HttpClient
}
// using UnityWebRequest
IEnumerator RestExample(string url)
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.isHttpError || www.isNetworkError)
{
Debug.Log(www.error);
}
else
{
// Show results as text
Debug.Log(www.downloadHandler.text);
// Or retrieve results as binary data
byte[] results = www.downloadHandler.data;
}
}
// using HttpClient
async Task<HttpResponseMessage> RestExampleHttpClient(string url)
{
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(url);
return await httpClient.GetAsync("?q=x"); //makes a get request, "?q=x" is a parameter example
}

WebSockets Example

MobiledgeX Unity Package comes with WebSocket Implementation (MobiledgeXWebSocketClient).

For Using MobiledgeXWebSocketClient:

  1. Start the WebSocket
  2. Handle received messages from your Edge server.
  3. Send messages. (Text or Binary)

For full example code, Please check RunTime/Scripts/ExampleWebSocket.cs

async void GetEdgeConnection()
{
mxi = new MobiledgeXIntegration();
await mxi.RegisterAndFindCloudlet();
mxi.GetAppPort(LProto.L_PROTO_TCP);
string url = mxi.GetUrl("ws");
await StartWebSocket(url);
wsClient.Send("WebSocketMsg");// You can send Text or Binary messages to the WebSocket Server
}
async Task StartWebSocket(string url)
{
wsClient = new MobiledgeXWebSocketClient();
if (wsClient.isOpen())
{
wsClient.Dispose();
wsClient = new MobiledgeXWebSocketClient();
}
Uri uri = new Uri(url);
await wsClient.Connect(uri);
}
// Handle received messages from your Edge server
// Using MonoBehaviour callback Update to dequeue Received WebSocket Messages every frame (if there is any)
private void Update()
{
if (wsClient == null)
{
return;
}
var cqueue = wsClient.receiveQueue;
string msg;
while (cqueue.TryPeek(out msg))
{
cqueue.TryDequeue(out msg);
Debug.Log("WebSocket Received messgae : " + msg);
}
}

UDP Example

MobiledgeX Unity Package comes with UDP Client Implementation (MobiledgeXUDPClient).

For Using MobiledgeXUDPClient :

  1. Start the UDP Connection
  2. Handle received messages from your Edge server.
  3. Send messages. (Text or Binary)

For full example code, Please check RunTime/Scripts/ExampleUDP.cs

async void GetEdgeConnection()
{
mxi = new MobiledgeXIntegration();
await mxi.RegisterAndFindCloudlet();
// udpSendPort is the udp port exposed on your EdgeServer
int udpSendPort = mxi.GetAppPort(LProto.L_PROTO_UDP).public_port;
int udpReceivePort = 5000; //You can define the receive port
udpHost = mxi.GetHost();
SendUDPMessage("Hi, From client to server", udpHost, udpSendPort, udpReceivePort);
}
void SendUDPMessage(string message, string udpHost, int udpSendPort, int udpReceivePort)
{
udpClient = new MobiledgeXUDPClient(udpHost, udpSendPort, udpReceivePort);
udpClient.Connect();
udpClient.Send(message);
//You can send binary also
//byte[] messageBinary = Encoding.ASCII.GetBytes(message);
//udpClient.Send(messageBinary);
}
// Handle received messages from your Edge server
// Using MonoBehaviour callback Update to dequeue Received UDP Messages every frame (if there is any)
void Update()
{
if (udpClient == null)
{
return;
}
//udp receive queue
byte[] udpMsg;
var udp_queue = udpClient.receiveQueue;
while (udp_queue.TryPeek(out udpMsg))
{
udp_queue.TryDequeue(out udpMsg);
string udpReceivedMsg = Encoding.UTF8.GetString(udpMsg);
print("Received UDP Message : " + udpReceivedMsg);
}
}