Skip to content

Commit

Permalink
Merge pull request #33 from brcoding/Experiments
Browse files Browse the repository at this point in the history
Fixes for sendOOBMessages to be optionally async
  • Loading branch information
brcoding authored Jun 26, 2020
2 parents adfcf08 + 132dfb6 commit abeb45c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 14 deletions.
40 changes: 35 additions & 5 deletions Mods/HandoutsPlugin/HandoutsPlugin/HandoutsPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
using BepInEx.Configuration;
using Unity.Mathematics;
using System.Linq;
using System.Net.Sockets;
using System.Text;

namespace HandoutsPlugin
{
Expand Down Expand Up @@ -115,10 +117,7 @@ IEnumerator DownloadImage(string MediaUrl)

public void CheckOOB()
{

ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"get\"}");
OOBResponse[] json = JsonConvert.DeserializeObject<OOBResponse[]>(ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"get\"}"));
foreach (OOBResponse item in json)
foreach (OOBResponse item in oobJson)
{
Debug.Log("Board Load ID: " + item.boardLoadId);
if (!seenMessages.Contains(item.messageid))
Expand All @@ -134,8 +133,39 @@ public void CheckOOB()
StartCoroutine(DownloadImage(item.handoutUrl));
}
}
oobJson = new OOBResponse[] { };
//ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"get\"}", SendCallback);
ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"get\"}", SendCallback);

}

private OOBResponse[] oobJson = new OOBResponse[] { };

private void SendCallback(IAsyncResult ar)
{
try
{
Socket socket = (Socket)ar.AsyncState;
// Complete sending the data to the remote device.
int bytesSent = socket.EndSend(ar);
Console.WriteLine("Sent {0} bytes to server.", bytesSent);

byte[] buffer = ModdingUtils.ReceiveAll(socket);
int bytesRec = buffer.Length;
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
oobJson = JsonConvert.DeserializeObject<OOBResponse[]>(data);

// Retrieve the socket from the state object.
Socket client = (Socket)ar.AsyncState;

}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}


void Update()
{
var board = BoardSessionManager.Board;
Expand Down Expand Up @@ -212,7 +242,7 @@ void Update()
{
SystemMessage.AskForTextInput("Handout URL", "Enter the Handout URL (PNG or JPG Image Only)", "OK", delegate (string name)
{
ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"put\", \"handoutUrl\": \"" + name + "\"}");
ModdingUtils.SendOOBMessage("{\"sessionid\": \"" + CampaignSessionManager.Info.CampaignId + "\", \"type\": \"put\", \"handoutUrl\": \"" + name + "\"}", null);
}, delegate
{
}, "Cancel", delegate
Expand Down
26 changes: 17 additions & 9 deletions Utils/ModdingUtils/ModdingUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ private static void StartSocketServer()
}


public static string SendOOBMessage(string message)
public static string SendOOBMessage(string message, AsyncCallback callback = null)
{
int port = 887;

Expand All @@ -263,14 +263,22 @@ public static string SendOOBMessage(string message)
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(localEndPoint);
byte[] byteData = Encoding.UTF8.GetBytes(message);
socket.Send(byteData);
byte[] buffer = ReceiveAll(socket);
int bytesRec = buffer.Length;
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);

//Debug.Log("OOB Response: " + data);
//Debug.Log("Buffer Len:" + bytesRec.ToString());
return data;
if (callback != null)
{
socket.BeginSend(byteData, 0, byteData.Length, 0,
new AsyncCallback(callback), socket);
return "";
} else
{
socket.Send(byteData);
byte[] buffer = ReceiveAll(socket);
int bytesRec = buffer.Length;
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);

//Debug.Log("OOB Response: " + data);
//Debug.Log("Buffer Len:" + bytesRec.ToString());
return data;
}
}

private static string GetPlayerControlledList(string[] input)
Expand Down

0 comments on commit abeb45c

Please sign in to comment.