tune
This commit is contained in:
@@ -113,7 +113,7 @@
|
||||
<li>Pause</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Both webservice and win-desktop applications use <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events for monitoring <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PacePlayer">PacePlayer</a> status changes.</li>
|
||||
<li>Both webservice and win-desktop applications use <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events for monitoring <xref:Hi.MachiningProcs.MachiningProject.PacePlayer> status changes.</li>
|
||||
<li>In webservice applications, the <code>PlayerStatusService</code> subscribes to these <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events and broadcasts status changes via <code>PlayerStatusHub</code> using SignalR for real-time communication.</li>
|
||||
<li>Win-desktop applications can directly subscribe to <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events for status updates.</li>
|
||||
<li>Alter the background color of the <code>Status Text Field</code> if the status changed.
|
||||
@@ -162,7 +162,7 @@
|
||||
<li>Players/PlayerStatusService.cs</li>
|
||||
</ul>
|
||||
<h4 id="signalr-implementation-webapi-only">SignalR Implementation (Webapi Only)</h4>
|
||||
<p><code>PlayerStatusHub</code> provides real-time player status updates, with methods <code>GetPlayerStatus()</code> and event <code>PlayerStatusUpdated</code>. <code>PlayerStatusService</code> monitors <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events (<a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer_IsRunningChangedEvent">PacePlayer_IsRunningChangedEvent</a>, <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer_IsLockedChangedEvent">PacePlayer_IsLockedChangedEvent</a>, <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer_IsFinishedChangedEvent">PacePlayer_IsFinishedChangedEvent</a>, <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer_ResetedEvent">PacePlayer_ResetedEvent</a>) and broadcasts changes via SignalR. The JavaScript component connects to <code>/playerStatusHub</code> and listens for status updates. API endpoints include <code>/api/player/start</code>, <code>/api/player/pause</code>, <code>/api/player/resume</code>, <code>/api/player/run-line</code>, <code>/api/player/run-step</code>, <code>/api/player/stop</code>, and <code>/api/player/reset</code>.</p>
|
||||
<p><code>PlayerStatusHub</code> provides real-time player status updates, with methods <code>GetPlayerStatus()</code> and event <code>PlayerStatusUpdated</code>. <code>PlayerStatusService</code> monitors <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events (<xref:Hi.MachiningProcs.LocalProjectService.PacePlayer_IsRunningChangedEvent>, <xref:Hi.MachiningProcs.LocalProjectService.PacePlayer_IsLockedChangedEvent>, <xref:Hi.MachiningProcs.LocalProjectService.PacePlayer_IsFinishedChangedEvent>, <xref:Hi.MachiningProcs.LocalProjectService.PacePlayer_ResetedEvent>) and broadcasts changes via SignalR. The JavaScript component connects to <code>/playerStatusHub</code> and listens for status updates. API endpoints include <code>/api/player/start</code>, <code>/api/player/pause</code>, <code>/api/player/resume</code>, <code>/api/player/run-line</code>, <code>/api/player/run-step</code>, <code>/api/player/stop</code>, and <code>/api/player/reset</code>.</p>
|
||||
<h3 id="razor-page-source-code">Razor Page Source Code</h3>
|
||||
<pre><code class="lang-csharp" name="SampleCode-razor">@using Hi.Common.PathUtils;
|
||||
@using Hi.HiNcKits;
|
||||
@@ -173,6 +173,7 @@
|
||||
|
||||
@{
|
||||
MachiningProject machiningProject = hiNcHost.MachiningProject;
|
||||
var localProjectService = hiNcHost.LocalProjectService;
|
||||
bool disabledByMachiningProject = machiningProject == null;
|
||||
}
|
||||
|
||||
@@ -186,15 +187,15 @@
|
||||
<div class="d-inline-block" style="width: 4rem">
|
||||
@{
|
||||
if (machiningProject == null) { }
|
||||
else if (machiningProject.PacePlayer.IsRunning)
|
||||
else if (localProjectService.PacePlayer.IsRunning)
|
||||
{
|
||||
<span class="badge text-bg-warning">@Loc["Running"]</span>
|
||||
}
|
||||
else if (machiningProject.PacePlayer.IsLocked)
|
||||
else if (localProjectService.PacePlayer.IsLocked)
|
||||
{
|
||||
<span class="badge text-bg-secondary">@Loc["Pause"]</span>
|
||||
}
|
||||
else if (machiningProject.PacePlayer.IsFinished)
|
||||
else if (localProjectService.PacePlayer.IsFinished)
|
||||
{
|
||||
<span class="badge text-bg-success">@Loc["Finish"]</span>
|
||||
}
|
||||
@@ -210,11 +211,11 @@
|
||||
<div id="player-@Tid" class="btn-group collapse collapse-horizontal show" role="group">
|
||||
|
||||
@if (machiningProject == null) { }
|
||||
else if (!machiningProject.PacePlayer.IsLocked)
|
||||
else if (!localProjectService.PacePlayer.IsLocked)
|
||||
{
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Start"] (S)"
|
||||
accesskey="s"
|
||||
disabled="@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)"
|
||||
disabled="@(disabledByMachiningProject||localProjectService.PacePlayer.IsFinished)"
|
||||
@onclick="StartOrContinue">
|
||||
<span class="oi oi-media-play me-1"></span>
|
||||
</button>
|
||||
@@ -224,27 +225,27 @@
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Continue"] (S)"
|
||||
accesskey="s"
|
||||
@onclick="StartOrContinue"
|
||||
disabled="@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished||machiningProject.PacePlayer.IsRunning)">
|
||||
disabled="@(disabledByMachiningProject||localProjectService.PacePlayer.IsFinished||localProjectService.PacePlayer.IsRunning)">
|
||||
<span class="oi oi-media-play me-1"></span>
|
||||
</button>
|
||||
}
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Pause"] (P)"
|
||||
accesskey="p"
|
||||
@onclick="Pause"
|
||||
disabled="@(disabledByMachiningProject||!machiningProject.PacePlayer.IsRunning)">
|
||||
disabled="@(disabledByMachiningProject||!localProjectService.PacePlayer.IsRunning)">
|
||||
<span class="oi oi-media-pause me-1"></span>
|
||||
</button>
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Run One Line"] (L)"
|
||||
accesskey="l"
|
||||
@onclick="RunToLineEnd"
|
||||
disabled="@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)">
|
||||
disabled="@(disabledByMachiningProject||localProjectService.PacePlayer.IsFinished)">
|
||||
<span class="oi oi-media-step-forward me-1"></span>
|
||||
</button>
|
||||
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Run One Step"] (K)"
|
||||
accesskey="k"
|
||||
@onclick="RunToNextPace"
|
||||
disabled="@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)">
|
||||
disabled="@(disabledByMachiningProject||localProjectService.PacePlayer.IsFinished)">
|
||||
<CommonRcl.Shared.CombinedIcon>
|
||||
<IconA>
|
||||
<span class="oi oi-media-step-forward me-1"></span>
|
||||
@@ -259,7 +260,7 @@
|
||||
|
||||
<button class="btn btn-primary text-nowrap" title="@Loc["Break"]"
|
||||
@onclick="@Break"
|
||||
disabled="@(disabledByMachiningProject||!(machiningProject.PacePlayer.IsLocked||machiningProject.PacePlayer.IsFinished))">
|
||||
disabled="@(disabledByMachiningProject||!(localProjectService.PacePlayer.IsLocked||localProjectService.PacePlayer.IsFinished))">
|
||||
<span class="oi oi-media-stop me-1"></span>
|
||||
</button>
|
||||
|
||||
@@ -285,6 +286,7 @@ namespace HiNcRcl.Areas.Player
|
||||
StringLocalizer Loc { get; } = new StringLocalizer(typeof(PlayerDiv));
|
||||
SemaphoreSlim DisposeSemaphore { get; } = new SemaphoreSlim(1);
|
||||
MachiningProject MachiningProject => hiNcHost.MachiningProject;
|
||||
LocalProjectService LocalProjectService => hiNcHost.LocalProjectService;
|
||||
bool disposedValue = false;
|
||||
/// <inheritdoc/>
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
@@ -297,11 +299,11 @@ namespace HiNcRcl.Areas.Player
|
||||
var machiningProject = MachiningProject;
|
||||
if (machiningProject != null)
|
||||
{
|
||||
machiningProject.PacePlayer.IsLockedChangedEvent
|
||||
LocalProjectService.PacePlayer.IsLockedChangedEvent
|
||||
+= EnumerablePlayer_IsLockedEventHandler;
|
||||
machiningProject.PacePlayer.IsRunningChangedEvent
|
||||
LocalProjectService.PacePlayer.IsRunningChangedEvent
|
||||
+= EnumerablePlayer_IsLockedEventHandler;
|
||||
machiningProject.PacePlayer.IsFinishedChangedEvent
|
||||
LocalProjectService.PacePlayer.IsFinishedChangedEvent
|
||||
+= EnumerablePlayer_IsLockedEventHandler;
|
||||
}
|
||||
}
|
||||
@@ -314,11 +316,11 @@ namespace HiNcRcl.Areas.Player
|
||||
var machiningProject = MachiningProject;
|
||||
if (machiningProject != null)
|
||||
{
|
||||
machiningProject.PacePlayer.IsLockedChangedEvent
|
||||
LocalProjectService.PacePlayer.IsLockedChangedEvent
|
||||
-= EnumerablePlayer_IsLockedEventHandler;
|
||||
machiningProject.PacePlayer.IsRunningChangedEvent
|
||||
LocalProjectService.PacePlayer.IsRunningChangedEvent
|
||||
-= EnumerablePlayer_IsLockedEventHandler;
|
||||
machiningProject.PacePlayer.IsFinishedChangedEvent
|
||||
LocalProjectService.PacePlayer.IsFinishedChangedEvent
|
||||
-= EnumerablePlayer_IsLockedEventHandler;
|
||||
}
|
||||
disposedValue = true;
|
||||
@@ -333,14 +335,15 @@ namespace HiNcRcl.Areas.Player
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
if (!MachiningProject.PacePlayer.IsLocked)
|
||||
var pacePlayer = LocalProjectService.PacePlayer;
|
||||
if (!pacePlayer.IsLocked)
|
||||
{
|
||||
MachiningProject.PacePlayer.Start();
|
||||
pacePlayer.Start();
|
||||
}
|
||||
else if (!MachiningProject.PacePlayer.IsRunning
|
||||
&& !MachiningProject.PacePlayer.IsFinished)
|
||||
else if (!pacePlayer.IsRunning
|
||||
&& !pacePlayer.IsFinished)
|
||||
{
|
||||
MachiningProject.PacePlayer.Resume();
|
||||
pacePlayer.Resume();
|
||||
}
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
@@ -348,35 +351,35 @@ namespace HiNcRcl.Areas.Player
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
MachiningProject?.PacePlayer.Pause();
|
||||
LocalProjectService.PacePlayer.Pause();
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
public async Task RunToLineEnd()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
MachiningProject?.NcRunner.RunToLineEnd();
|
||||
LocalProjectService.NcRunner.RunToLineEnd();
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
public async Task RunToNextPace()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
MachiningProject?.PacePlayer.RunToNextPace();
|
||||
LocalProjectService.PacePlayer.RunToNextPace();
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
public async Task Break()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
MachiningProject?.PacePlayer.Terminate();
|
||||
LocalProjectService.PacePlayer.Terminate();
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
public async Task Reset()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
MachiningProject?.PacePlayer.Reset();
|
||||
LocalProjectService.PacePlayer.Reset();
|
||||
}).ShowIfCatched(this);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -89,7 +89,7 @@
|
||||
|
||||
<p>The panel locates on the <a href="index.html">Player Panel</a>.</p>
|
||||
<p>The model is <a class="xref" href="../../../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> and <xref:Hi.HiNcKits.AppService>.</p>
|
||||
<p>The <a class="xref" href="../../../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> is assigned by <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_ClStrip">ClStrip</a>.<a class="xref" href="../../../../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_PosSelected">PosSelected</a>.</p>
|
||||
<p>The <a class="xref" href="../../../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> is assigned by <xref:Hi.MachiningProcs.MachiningProject.ClStrip>.<a class="xref" href="../../../../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_PosSelected">PosSelected</a>.</p>
|
||||
<p>Show step infomation from <xref:Hi.HiNcKits.AppService>.<xref:Hi.HiNcKits.AppService.DisplayedStepPresentAccessList>.</p>
|
||||
<p>The resx of <a class="xref" href="../../../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> contains the translation of <a class="xref" href="../../../../api/Hi.MachiningSteps.PresentAttribute.html">PresentAttribute</a>.<a class="xref" href="../../../../api/Hi.MachiningSteps.PresentAttribute.html#Hi_MachiningSteps_PresentAttribute_Name">Name</a>, apply the translation to the GUI. If the translation not existed, use the original value.</p>
|
||||
<p>See Also <a href="../preference/step-present-preference-page.html">Step Present Preference Page</a>.</p>
|
||||
@@ -106,7 +106,7 @@
|
||||
}
|
||||
}
|
||||
</code></pre><h2 id="signalr-implementation-webapi-only">SignalR Implementation (Webapi Only)</h2>
|
||||
<p><code>SelectedStepInfoHub</code> provides real-time step updates with method <code>GetSelectedStepInfo()</code> and event <code>SelectedStepInfoUpdated</code>. <code>SelectedStepInfoService</code> monitors <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ClStrip_PosSelected">ClStrip_PosSelected</a> and <a class="xref" href="../../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ClStrip_MachiningStepSelected">ClStrip_MachiningStepSelected</a> events and broadcasts updates. The JavaScript component connects to <code>/selectedStepInfoHub</code> to receive step change notifications and update the UI accordingly.</p>
|
||||
<p><code>SelectedStepInfoHub</code> provides real-time step updates with method <code>GetSelectedStepInfo()</code> and event <code>SelectedStepInfoUpdated</code>. <code>SelectedStepInfoService</code> monitors <xref:Hi.MachiningProcs.LocalProjectService.ClStrip_PosSelected> and <xref:Hi.MachiningProcs.LocalProjectService.ClStrip_MachiningStepSelected> events and broadcasts updates. The JavaScript component connects to <code>/selectedStepInfoHub</code> to receive step change notifications and update the UI accordingly.</p>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">this page</a> for git repository.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
|
||||
Reference in New Issue
Block a user