Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 8 additions & 17 deletions Distribution/wwDotnetBridge.PRG
Original file line number Diff line number Diff line change
Expand Up @@ -1838,34 +1838,25 @@ this.oBridge.InvokeMethodAsync(this,this.oSubscriber,"WaitForEvent")
ENDFUNC

************************************************************************
* OnComplete
* OnCompleted
****************************************
*** Function: Event Proxy that forwards the event to a function
*** named On{Event} with event's parameters.
************************************************************************
FUNCTION OnCompleted(lvResult, lcMethod)
LOCAL loParams,lParamText,lCount
LOCAL lParamText, lCount

IF ISNULL(lvResult) && If the call to WaitForEvent was canceled:
IF ISNULL(lvResult) OR VARTYPE(THIS.oHandler) != "O" && If the call to WaitForEvent was canceled or the handler was unsubscribed:
RETURN
ENDIF


loParams=CREATEOBJECT("EMPTY") && Workaround to index into array of parameters.
lParamText = ""
IF NOT ISNULL(lvResult.Params)
lCount = 0
FOR EACH lParam IN lvResult.Params
lCount = lCount + 1
AddProperty(loParams,"P" + ALLTRIM(STR(lCount)),lParam)
lParamText = lParamText + ",loParams.P" + ALLTRIM(STR(lCount))
ENDFOR
ENDIF
FOR lCount = 0 TO lvResult.Params.Count - 1
lParamText = lParamText + ",lvResult.Params.Item(" + ALLTRIM(STR(lCount)) + ")"
ENDFOR

IF VARTYPE(THIS.oHandler) = "O"
=EVALUATE("this.oHandler." + this.oPrefix + lvResult.Name + "("+SUBSTR(lParamText,2)+")")
this.HandleNextEvent()
ENDIF
=EVALUATE("this.oHandler." + this.oPrefix + lvResult.Name + "("+SUBSTR(lParamText,2)+")")
this.HandleNextEvent()

ENDFUNC

Expand Down
7 changes: 5 additions & 2 deletions DotnetBridge/Utilities/EventSubscriber.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
Expand Down Expand Up @@ -69,7 +70,9 @@ public void Dispose()

private void QueueInteropEvent(string name, object[] parameters)
{
var interopEvent = new RaisedEvent { Name = name, Params = parameters };
var parametersArrayList = new ArrayList(parameters.Length);
parametersArrayList.AddRange(parameters);
var interopEvent = new RaisedEvent { Name = name, Params = parametersArrayList };
if (!_completion.TrySetResult(interopEvent))
_raisedEvents.Enqueue(interopEvent);
}
Expand All @@ -93,6 +96,6 @@ public RaisedEvent WaitForEvent()
public class RaisedEvent
{
public string Name { get; internal set; }
public object[] Params { get; internal set; }
public ArrayList Params { get; internal set; }
}
}
4 changes: 2 additions & 2 deletions Tests/EventSubscriberTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ public void EventSubscriber_WaitForFutureEvents()
static void VerifyResults(EventSubscriber subscriber)
{
var result = subscriber.WaitForEvent();
Assert.IsTrue(result.Name == nameof(Loopback.NoParams) && result.Params.Length == 0);
Assert.IsTrue(result.Name == nameof(Loopback.NoParams) && result.Params.Count == 0);
result = subscriber.WaitForEvent();
Assert.IsTrue(result.Name == nameof(Loopback.TwoParams) && result.Params.Length == 2 && (string)result.Params[0] == "A" && (int)result.Params[1] == 1);
Assert.IsTrue(result.Name == nameof(Loopback.TwoParams) && result.Params.Count == 2 && (string)result.Params[0] == "A" && (int)result.Params[1] == 1);
}
}

Expand Down