feat(worker): implement 6 MXAccess COM commands in executor
Wire up the previously-unimplemented Suspend, Activate, AuthenticateUser, ArchestrAUserToId, AddBufferedItem, and SetBufferedUpdateInterval command kinds in MxAccessCommandExecutor. These are real COM calls and run on the STA via the executor. - IMxAccessServer gains the 6 methods; MxAccessComServer routes them to the right interface version (Suspend/Activate -> ILMXProxyServer4 out MxStatus, AuthenticateUser -> base ILMXProxyServer, ArchestrAUserToId -> ILMXProxyServer2, AddBufferedItem/SetBufferedUpdateInterval -> ILMXProxyServer5). - Suspend/Activate surface the native MxStatus, converted to MxStatusProxy via the existing MxStatusProxyConverter. - AuthenticateUser hands the credential straight to MXAccess and never logs it; native HResult failures propagate via the dispatcher. - MxAccessSession gains matching pass-throughs; AddBufferedItem registers the item handle in the handle registry. - Unit tests (fake IMxAccessServer / fake COM object) cover each arm plus a password-non-leak assertion; existing IMxAccessServer fakes updated. No proto changes (all request/reply messages already exist).
This commit is contained in:
@@ -300,6 +300,94 @@ public sealed class MxAccessSession : IDisposable
|
||||
MxAccessAdviceKind.Supervisory);
|
||||
}
|
||||
|
||||
/// <summary>Suspends data acquisition for an advised item and returns the native MXAccess status.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="itemHandle">Handle returned by the worker.</param>
|
||||
/// <returns>The boxed native MXAccess status produced by the call.</returns>
|
||||
public object Suspend(
|
||||
int serverHandle,
|
||||
int itemHandle)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
return mxAccessServer.Suspend(serverHandle, itemHandle);
|
||||
}
|
||||
|
||||
/// <summary>Reactivates data acquisition for a suspended item and returns the native MXAccess status.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="itemHandle">Handle returned by the worker.</param>
|
||||
/// <returns>The boxed native MXAccess status produced by the call.</returns>
|
||||
public object Activate(
|
||||
int serverHandle,
|
||||
int itemHandle)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
return mxAccessServer.Activate(serverHandle, itemHandle);
|
||||
}
|
||||
|
||||
/// <summary>Authenticates an MXAccess user and returns its user id.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="verifyUser">MXAccess user name to authenticate.</param>
|
||||
/// <param name="verifyUserPassword">Raw MXAccess credential; never logged.</param>
|
||||
/// <returns>The MXAccess user id for the authenticated user.</returns>
|
||||
public int AuthenticateUser(
|
||||
int serverHandle,
|
||||
string verifyUser,
|
||||
string verifyUserPassword)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
return mxAccessServer.AuthenticateUser(serverHandle, verifyUser, verifyUserPassword);
|
||||
}
|
||||
|
||||
/// <summary>Resolves an ArchestrA user GUID to an MXAccess user id.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="userIdGuid">ArchestrA user GUID to resolve.</param>
|
||||
/// <returns>The MXAccess user id for the resolved user.</returns>
|
||||
public int ArchestrAUserToId(
|
||||
int serverHandle,
|
||||
string userIdGuid)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
return mxAccessServer.ArchestrAUserToId(serverHandle, userIdGuid);
|
||||
}
|
||||
|
||||
/// <summary>Adds a buffered item to an MXAccess server and returns the item handle.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="itemDefinition">Definition or address of the item to add.</param>
|
||||
/// <param name="itemContext">Context string for the item.</param>
|
||||
public int AddBufferedItem(
|
||||
int serverHandle,
|
||||
string itemDefinition,
|
||||
string itemContext)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
int itemHandle = mxAccessServer.AddBufferedItem(serverHandle, itemDefinition, itemContext);
|
||||
handleRegistry.RegisterItemHandle(
|
||||
serverHandle,
|
||||
itemHandle,
|
||||
itemDefinition,
|
||||
itemContext,
|
||||
hasItemContext: true);
|
||||
|
||||
return itemHandle;
|
||||
}
|
||||
|
||||
/// <summary>Sets the buffered-update interval for an MXAccess server.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="updateIntervalMilliseconds">Buffered update interval in milliseconds.</param>
|
||||
public void SetBufferedUpdateInterval(
|
||||
int serverHandle,
|
||||
int updateIntervalMilliseconds)
|
||||
{
|
||||
ThrowIfDisposed();
|
||||
|
||||
mxAccessServer.SetBufferedUpdateInterval(serverHandle, updateIntervalMilliseconds);
|
||||
}
|
||||
|
||||
/// <summary>Writes a value to an item.</summary>
|
||||
/// <param name="serverHandle">Handle returned by the worker.</param>
|
||||
/// <param name="itemHandle">Handle returned by the worker.</param>
|
||||
|
||||
Reference in New Issue
Block a user