From cf3d038a818e8e54c6603aa2c94b423d98b83d4b Mon Sep 17 00:00:00 2001 From: peternewell Date: Mon, 14 Oct 2019 16:44:45 +1100 Subject: [PATCH 01/21] Show both DynamicBrakeForce and MotiveForce values in Locomotive HUD --- Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs b/Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs index a5024d7739..d4d7b0c3cc 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs @@ -1511,8 +1511,9 @@ public virtual string GetDebugStatus() AcceptMUSignals ? Simulator.Catalog.GetString("Yes") : Simulator.Catalog.GetString("No"), ThrottlePercent, String.Format("{0}{1}", FormatStrings.FormatSpeedDisplay(SpeedMpS, IsMetric), WheelSlip ? "!!!" : ""), - FormatStrings.FormatPower(MotiveForceN * SpeedMpS, IsMetric, false, false), - String.Format("{0}{1}", FormatStrings.FormatForce(MotiveForceN, IsMetric), CouplerExceedBreakLimit ? "???" : "")); + // For Locomotive HUD display shows "forward" motive power (& force) as a positive value, braking power (& force) will be shown as negative values. + FormatStrings.FormatPower((MotiveForceN - DynamicBrakeForceN) * SpeedMpS, IsMetric, false, false), + String.Format("{0}{1}", FormatStrings.FormatForce((MotiveForceN - DynamicBrakeForceN), IsMetric), CouplerExceedBreakLimit ? "???" : "")); } public virtual string GetTrainBrakeStatus() { return null; } public virtual string GetEngineBrakeStatus() { return null; } From 3436d36c81b5b5b86cca75d61627ea5053511633 Mon Sep 17 00:00:00 2001 From: Csantucci Date: Sat, 19 Oct 2019 18:37:45 +0200 Subject: [PATCH 02/21] Bug fix for https://bugs.launchpad.net/or/+bug/1848878 AI train WP restart events don't work after save --- .../Orts.Simulation/Simulation/AIs/AIAuxAction.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs index 29e865415f..f5ff0c1317 100644 --- a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs +++ b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs @@ -144,16 +144,21 @@ public void Save(BinaryWriter outf, int currentClock) { if (ThisTrain is AITrain && ((aiTrain.MovementState == AITrain.AI_MOVEMENT_STATE.HANDLE_ACTION && aiTrain.nextActionInfo != null && - aiTrain.nextActionInfo.NextAction == AIActionItem.AI_ACTION_TYPE.AUX_ACTION && aiTrain.nextActionInfo != null && aiTrain.nextActionInfo is AuxActionWPItem) + aiTrain.nextActionInfo.NextAction == AIActionItem.AI_ACTION_TYPE.AUX_ACTION && aiTrain.nextActionInfo is AuxActionWPItem) || ( aiTrain.AuxActionsContain.SpecAuxActions.Count > 0 && aiTrain.AuxActionsContain.SpecAuxActions[0] is AIActionWPRef && (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).keepIt != null && (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).keepIt.currentMvmtState == AITrain.AI_MOVEMENT_STATE.HANDLE_ACTION))) // WP is running { - int remainingDelay; - if (aiTrain.nextActionInfo != null && aiTrain.nextActionInfo is AuxActionWPItem) remainingDelay = ((AuxActionWPItem)aiTrain.nextActionInfo).ActualDepart - currentClock; - else remainingDelay = ((AIActionWPRef)SpecAuxActions[0]).keepIt.ActualDepart - currentClock; - ((AIActionWPRef)SpecAuxActions[0]).SetDelay(remainingDelay); + // Do nothing if it is an absolute WP + if (!(aiTrain.AuxActionsContain.SpecAuxActions.Count > 0 && aiTrain.AuxActionsContain.SpecAuxActions[0] is AIActionWPRef && + ((aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay >= 30000 || (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay < 40000))) + { + int remainingDelay; + if (aiTrain.nextActionInfo != null && aiTrain.nextActionInfo is AuxActionWPItem) remainingDelay = ((AuxActionWPItem)aiTrain.nextActionInfo).ActualDepart - currentClock; + else remainingDelay = ((AIActionWPRef)SpecAuxActions[0]).keepIt.ActualDepart - currentClock; + ((AIActionWPRef)SpecAuxActions[0]).SetDelay(remainingDelay); + } } } foreach (var action in SpecAuxActions) From feaf1d712f211fb9f56a1bd7631d420538a8ef1c Mon Sep 17 00:00:00 2001 From: Csantucci Date: Sun, 20 Oct 2019 10:54:04 +0200 Subject: [PATCH 03/21] Bug fix for https://bugs.launchpad.net/or/+bug/1848915 Crash by switching on multiple passenger views --- Source/RunActivity/Viewer3D/Cameras.cs | 36 ++++++++++++++++---------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/Source/RunActivity/Viewer3D/Cameras.cs b/Source/RunActivity/Viewer3D/Cameras.cs index 88898c9bce..e509442084 100644 --- a/Source/RunActivity/Viewer3D/Cameras.cs +++ b/Source/RunActivity/Viewer3D/Cameras.cs @@ -1775,22 +1775,32 @@ protected override void SetCameraCar(TrainCar car) base.SetCameraCar(car); // Settings are held so that when switching back from another camera, view is not reset. // View is only reset on move to a different car and/or viewpoint or "Ctl + 8". - if (car.CarID != prevcar || ActViewPoint != prevViewPoint) - { - prevcar = car.CarID; - prevViewPoint = ActViewPoint; - viewPointLocation = attachedCar.PassengerViewpoints[ActViewPoint].Location; - viewPointRotationXRadians = attachedCar.PassengerViewpoints[ActViewPoint].RotationXRadians; - viewPointRotationYRadians = attachedCar.PassengerViewpoints[ActViewPoint].RotationYRadians; - RotationXRadians = viewPointRotationXRadians; - RotationYRadians = viewPointRotationYRadians; - attachedLocation = viewPointLocation; - StartViewPointLocation = viewPointLocation; - StartViewPointRotationXRadians = viewPointRotationXRadians; - StartViewPointRotationYRadians = viewPointRotationYRadians; + if (car.CarID != prevcar) + { + ActViewPoint = 0; + ResetViewPoint(car); + } + else if (ActViewPoint != prevViewPoint) + { + ResetViewPoint(car); } } + protected void ResetViewPoint (TrainCar car) + { + prevcar = car.CarID; + prevViewPoint = ActViewPoint; + viewPointLocation = attachedCar.PassengerViewpoints[ActViewPoint].Location; + viewPointRotationXRadians = attachedCar.PassengerViewpoints[ActViewPoint].RotationXRadians; + viewPointRotationYRadians = attachedCar.PassengerViewpoints[ActViewPoint].RotationYRadians; + RotationXRadians = viewPointRotationXRadians; + RotationYRadians = viewPointRotationYRadians; + attachedLocation = viewPointLocation; + StartViewPointLocation = viewPointLocation; + StartViewPointRotationXRadians = viewPointRotationXRadians; + StartViewPointRotationYRadians = viewPointRotationYRadians; + } + public override void HandleUserInput(ElapsedTime elapsedTime) { base.HandleUserInput(elapsedTime); From a5d4112e66f644fb908e681a353b30400c41431b Mon Sep 17 00:00:00 2001 From: Csantucci Date: Sat, 16 Nov 2019 11:04:36 +0100 Subject: [PATCH 04/21] Bug fix for https://bugs.launchpad.net/or/+bug/1852843 Digital displays aren't shown in 3DCabs --- .../RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs b/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs index 1459583d67..9b0b4d05b9 100644 --- a/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs +++ b/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs @@ -2782,7 +2782,7 @@ public void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime) Matrix m = XNAMatrix * mx; // TODO: Make this use AddAutoPrimitive instead. - frame.AddPrimitive(this.shapePrimitive.Material, this.shapePrimitive, RenderPrimitiveGroup.World, ref m, ShapeFlags.None); + frame.AddPrimitive(this.shapePrimitive.Material, this.shapePrimitive, RenderPrimitiveGroup.Interior, ref m, ShapeFlags.None); } internal void Mark() @@ -2998,7 +2998,7 @@ public void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime) Matrix m = XNAMatrix * mx; // TODO: Make this use AddAutoPrimitive instead. - frame.AddPrimitive(this.shapePrimitive.Material, this.shapePrimitive, RenderPrimitiveGroup.World, ref m, ShapeFlags.None); + frame.AddPrimitive(this.shapePrimitive.Material, this.shapePrimitive, RenderPrimitiveGroup.Interior, ref m, ShapeFlags.None); } internal void Mark() From 147facd4534f715730ee70542a2cacfdc1a700e2 Mon Sep 17 00:00:00 2001 From: peternewell Date: Mon, 18 Nov 2019 08:10:08 +1100 Subject: [PATCH 05/21] To correct Cabview - http://www.elvastower.com/forums/index.php?/topic/33493-a-couple-of-bugs/ --- .../Simulation/RollingStocks/MSTSLocomotive.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs index dc5f5280b0..317ebc29b5 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs @@ -3797,6 +3797,11 @@ public virtual float GetDataOf(CabViewControl cvc) else data = this.LocomotiveAxle.AxleForceN; data = Math.Abs(data); + if (DynamicBrakePercent > 0) + { + data = (DynamicBrakeForceN / MaxDynamicBrakeForceN) * DynamicBrakeMaxCurrentA; + data = -Math.Abs(data); // Ensure that dynamic force is seen as a "-ve force" on the traction braking indicator + } switch (cvc.Units) { case CABViewControlUnits.AMPS: From 1b5c3112864913c5fd44d57ccc15825f8c103bb0 Mon Sep 17 00:00:00 2001 From: Csantucci Date: Tue, 19 Nov 2019 14:46:28 +0100 Subject: [PATCH 06/21] Bug fix for https://bugs.launchpad.net/or/+bug/1853154 2Dcab digital displays aren't clamped against ScaleRange --- Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs b/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs index 9b0b4d05b9..28ff342434 100644 --- a/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs +++ b/Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs @@ -2124,6 +2124,7 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime) var digital = Control as CVCDigital; Num = Locomotive.GetDataOf(Control); + if (digital.MinValue < digital.MaxValue) Num = MathHelper.Clamp(Num, (float)digital.MinValue, (float)digital.MaxValue); if (Math.Abs(Num) < digital.AccuracySwitch) Format = Format2; else From 15d0667be25762ce4cdbe85d893b1b944a1f1a19 Mon Sep 17 00:00:00 2001 From: peternewell Date: Wed, 20 Nov 2019 06:54:36 +1100 Subject: [PATCH 07/21] Corrected sign issue with Traction_Braking cab view - now +ve --- .../Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs index 317ebc29b5..e2fafea93c 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs @@ -3796,12 +3796,11 @@ public virtual float GetDataOf(CabViewControl cvc) data = this.FilteredMotiveForceN; else data = this.LocomotiveAxle.AxleForceN; - data = Math.Abs(data); if (DynamicBrakePercent > 0) { data = (DynamicBrakeForceN / MaxDynamicBrakeForceN) * DynamicBrakeMaxCurrentA; - data = -Math.Abs(data); // Ensure that dynamic force is seen as a "-ve force" on the traction braking indicator } + data = Math.Abs(data); switch (cvc.Units) { case CABViewControlUnits.AMPS: From ee7d6a2dc5f57928406c50389e3cdc13129b21da Mon Sep 17 00:00:00 2001 From: peternewell Date: Wed, 20 Nov 2019 22:21:55 +1100 Subject: [PATCH 08/21] Corrected issue with Traction_Braking --- .../Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs index e2fafea93c..2e921365e8 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs @@ -3798,7 +3798,7 @@ public virtual float GetDataOf(CabViewControl cvc) data = this.LocomotiveAxle.AxleForceN; if (DynamicBrakePercent > 0) { - data = (DynamicBrakeForceN / MaxDynamicBrakeForceN) * DynamicBrakeMaxCurrentA; + data = DynamicBrakeForceN; } data = Math.Abs(data); switch (cvc.Units) From 505f5bd127b744c3a80d9d9c8a1ac4c0921b95c0 Mon Sep 17 00:00:00 2001 From: cjakeman3 Date: Fri, 22 Nov 2019 19:14:49 +0000 Subject: [PATCH 09/21] Trick to bring Dispatch Window to the front, even though invisible, so that it appears immediately when Ctrl+9 is pressed --- Source/Documentation/Manual/driving.rst | 23 ++++++++----------- .../Viewer3D/Processes/GameStateViewer3D.cs | 6 +++++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Source/Documentation/Manual/driving.rst b/Source/Documentation/Manual/driving.rst index 7e234d7563..9f3ef9ac54 100644 --- a/Source/Documentation/Manual/driving.rst +++ b/Source/Documentation/Manual/driving.rst @@ -676,20 +676,17 @@ Dispatcher Window ================= The dispatcher window is a very useful tool to monitor and control train -operation. The :ref:`Dispatcher window ` option -must be selected. - -The dispatcher window is actually created by pressing ````. The -window is created in a minimized state, so to display it in front of the OR -window you must click on ```` and select the dispatcher window -icon, or click on one of the OR icons in the taskbar. If you are running OR -in full-screen mode, you must also have the :ref:`Fast full screen Alt+Tab -` option selected to have both the OR and the -dispatcher windows displayed at the same time. After the dispatcher window -has been selected with ````, successive Alt_Tabs will toggle -between the OR window and the dispatcher window. +operation. operation. To use it, select the :ref:`Dispatcher window +` option before you start the route. + +Open the dispatcher window by pressing ````. You can toggle +between the OR window and the dispatcher window by pressing ```` . + +If you have unchecked the option ``Windowed``, then the game window opens +full screen and the dispatch window opens out of sight behind it. You can +prevent this by checking the option Fast full-screen alt-tab in Options > Video. -The dispatcher window is resizable and can also be maximized, e.g. on a +The dispatcher window is not resizable but can be maximized, e.g. on a second display. You can define the level of zoom either by changing the value within the ``Res`` box or by using the mouse wheel. You can pan through the route by moving the mouse while pressing the left button. You diff --git a/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs b/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs index d4c7844d66..9482740cfe 100644 --- a/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs +++ b/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs @@ -55,6 +55,12 @@ internal override void BeginRender(RenderFrame frame) if (MPManager.IsMultiPlayer() || Game.Settings.ViewDispatcher) { Program.DebugViewer = new DispatchViewer(Viewer.Simulator, Viewer); + + //Trick to bring window to the front, even though invisible, so that it appears immediately when Ctrl+9 is pressed + Program.DebugViewer.WindowState = System.Windows.Forms.FormWindowState.Minimized; + Program.DebugViewer.Show(); + Program.DebugViewer.WindowState = System.Windows.Forms.FormWindowState.Normal; + Program.DebugViewer.Hide(); Viewer.DebugViewerEnabled = false; } From 19abd9ba75bef57b2ad053c442ffdb6d238f2e0e Mon Sep 17 00:00:00 2001 From: Csantucci Date: Tue, 26 Nov 2019 18:50:29 +0100 Subject: [PATCH 10/21] Correction of bug fix for https://bugs.launchpad.net/or/+bug/1848878 ; standard WP remaining time recalculated --- Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs index f5ff0c1317..232de2159a 100644 --- a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs +++ b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs @@ -152,7 +152,7 @@ public void Save(BinaryWriter outf, int currentClock) { // Do nothing if it is an absolute WP if (!(aiTrain.AuxActionsContain.SpecAuxActions.Count > 0 && aiTrain.AuxActionsContain.SpecAuxActions[0] is AIActionWPRef && - ((aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay >= 30000 || (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay < 40000))) + (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay >= 30000 && (aiTrain.AuxActionsContain.SpecAuxActions[0] as AIActionWPRef).Delay < 40000)) { int remainingDelay; if (aiTrain.nextActionInfo != null && aiTrain.nextActionInfo is AuxActionWPItem) remainingDelay = ((AuxActionWPItem)aiTrain.nextActionInfo).ActualDepart - currentClock; From 4ee4c2d104320a8fe36b7a3e3269693785c6a987 Mon Sep 17 00:00:00 2001 From: Csantucci Date: Thu, 28 Nov 2019 18:22:44 +0100 Subject: [PATCH 11/21] Bug fix for https://bugs.launchpad.net/or/+bug/1854381 Bell plays forever in AI trains after automatic horn blow --- .../Simulation/AIs/AIAuxAction.cs | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs index 232de2159a..7068ae53a3 100644 --- a/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs +++ b/Source/Orts.Simulation/Simulation/AIs/AIAuxAction.cs @@ -161,6 +161,29 @@ public void Save(BinaryWriter outf, int currentClock) } } } + // check for horn actions + if (ThisTrain is AITrain && aiTrain.AuxActionsContain.specRequiredActions.Count > 0) + { + foreach (AITrain.DistanceTravelledItem specRequiredAction in aiTrain.AuxActionsContain.specRequiredActions) + { + if (specRequiredAction is AuxActionHornItem) + { + if (SpecAuxActions.Count > 0) + { + foreach (AuxActionRef specAuxAction in SpecAuxActions) + { + if (specAuxAction is AIActionHornRef) + { + (specAuxAction as AIActionHornRef).Delay = (specRequiredAction as AuxActionHornItem).ActualDepart - currentClock; + break; + } + } + break; + } + else break; + } + } + } foreach (var action in SpecAuxActions) { ((AIAuxActionsRef)action).save(outf, cnt); @@ -1906,6 +1929,7 @@ public class AuxActionHornItem : AuxActionItem int Delay; [JsonIgnore] public int ActualDepart; + private const int BellPlayTime = 30; //================================================================================================// @@ -1982,6 +2006,15 @@ public override AITrain.AI_MOVEMENT_STATE InitAction(Train thisTrain, int presen Processing = true; int correctedTime = presentTime; ActualDepart = correctedTime + Delay; + if (!Triggered) + { +#if WITH_PATH_DEBUG + File.AppendAllText(@"C:\temp\checkpath.txt", "Do Horn for AITRain " + thisTrain.Number + " , mvt state " + movementState.ToString() + " at " + presentTime + "\n"); +#endif + TrainCar locomotive = thisTrain.FindLeadLocomotive(); + ((MSTSLocomotive)locomotive).ManualHorn = true; + Triggered = true; + } return AITrain.AI_MOVEMENT_STATE.HANDLE_ACTION; } @@ -1989,29 +2022,27 @@ public override AITrain.AI_MOVEMENT_STATE HandleAction(Train thisTrain, int pres { if (ActualDepart >= presentTime) { - if (!Triggered) - { -#if WITH_PATH_DEBUG - File.AppendAllText(@"C:\temp\checkpath.txt", "Do Horn for AITRain " + thisTrain.Number + " , mvt state " + movementState.ToString() + " at " + presentTime + "\n"); -#endif - TrainCar locomotive = thisTrain.FindLeadLocomotive(); - ((MSTSLocomotive)locomotive).ManualHorn = true; - Triggered = true; - } movementState = AITrain.AI_MOVEMENT_STATE.HANDLE_ACTION; } else { - thisTrain.AuxActionsContain.Remove(this); - + TrainCar locomotive = thisTrain.FindLeadLocomotive(); if (Triggered) { #if WITH_PATH_DEBUG File.AppendAllText(@"C:\temp\checkpath.txt", "Stop Horn for AITRain " + thisTrain.Number + " : mvt state " + movementState.ToString() + " at " + presentTime + "\n"); #endif - TrainCar locomotive = thisTrain.FindLeadLocomotive(); ((MSTSLocomotive)locomotive).ManualHorn = false; + Triggered = false; } + if (((MSTSLocomotive)locomotive).DoesHornTriggerBell && ActualDepart + BellPlayTime >= presentTime) + { + movementState = AITrain.AI_MOVEMENT_STATE.HANDLE_ACTION; + return movementState; + } + else if (((MSTSLocomotive)locomotive).DoesHornTriggerBell && ActualDepart + BellPlayTime < presentTime) + ((MSTSLocomotive)locomotive).BellState = MSTSLocomotive.SoundState.Stopped; + thisTrain.AuxActionsContain.Remove(this); return currentMvmtState; // Restore previous MovementState } return movementState; From 48541ec9d20ce87e2622288e0625bef922fe7855 Mon Sep 17 00:00:00 2001 From: Csantucci Date: Thu, 28 Nov 2019 19:59:32 +0100 Subject: [PATCH 12/21] Update manual for bug fix https://bugs.launchpad.net/or/+bug/1854381 --- Source/Documentation/Manual/operation.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Documentation/Manual/operation.rst b/Source/Documentation/Manual/operation.rst index f6cbc344d4..d7b76bf787 100644 --- a/Source/Documentation/Manual/operation.rst +++ b/Source/Documentation/Manual/operation.rst @@ -1800,6 +1800,10 @@ On the other hand, a horn blow waiting point may be positioned just after a normal WP (thus achieving the effect that the train blows the horn when it restarts). +If the lead locomotive of the AI train has parameter DoesHornTriggerBell +set to 1 in the .eng file, the bell is played for further 30 seconds after +the end of the horn blow. + To implement this feature it is not necessary to proceed as described in the first three paragraphs of this chapter. It is enough to insert the waiting points within the paths with either the MSTS AE or through TrackViewer. @@ -1824,6 +1828,10 @@ the route with TrackViewer allows identification of the true level crossings. If a horn blow is also desired for a *simple* road crossing, the feature *AI Train Horn Blow* described above must be used. +If the lead locomotive of the AI train has parameter DoesHornTriggerBell +set to 1 in the .eng file, the bell is played for further 30 seconds after +the end of the horn blow. + .. _operation-event-triggered-by-ai-train: Location Event triggered by AI Train From 897c9682072453649af4ab9ac9ceea07ea1380be Mon Sep 17 00:00:00 2001 From: Csantucci Date: Tue, 10 Dec 2019 18:16:43 +0100 Subject: [PATCH 13/21] Bug fix for https://bugs.launchpad.net/or/+bug/1208960 Wrong warning about missing animations in Milestone and Speedpostshape --- Source/RunActivity/Viewer3D/Shapes.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/RunActivity/Viewer3D/Shapes.cs b/Source/RunActivity/Viewer3D/Shapes.cs index 87999e21f3..c85e582ae2 100644 --- a/Source/RunActivity/Viewer3D/Shapes.cs +++ b/Source/RunActivity/Viewer3D/Shapes.cs @@ -255,7 +255,7 @@ public StaticTrackShape(Viewer viewer, string path, WorldPosition position) /// public class PoseableShape : StaticShape { - static Dictionary SeenShapeAnimationError = new Dictionary(); + protected static Dictionary SeenShapeAnimationError = new Dictionary(); public Matrix[] XNAMatrices = new Matrix[0]; // the positions of the subobjects @@ -628,6 +628,12 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime) // TODO: Make this use AddAutoPrimitive instead. frame.AddPrimitive(this.shapePrimitive.Material, this.shapePrimitive, RenderPrimitiveGroup.World, ref xnaXfmWrtCamTile, ShapeFlags.None); + // if there is no animation, that's normal and so no animation missing error is displayed + if (SharedShape.Animations == null || SharedShape.Animations.Count == 0) + { + if (!SeenShapeAnimationError.ContainsKey(SharedShape.FilePath)) + SeenShapeAnimationError[SharedShape.FilePath] = true; + } // Update the pose for (int iMatrix = 0; iMatrix < SharedShape.Matrices.Length; ++iMatrix) AnimateMatrix(iMatrix, AnimationKey); From 881662cf14e7bb93ad8112c2df2ad83cb50e66ee Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Fri, 20 Dec 2019 13:19:01 -0800 Subject: [PATCH 14/21] Updated Dan Reynolds (HighAspect). to 2019 OrUnstable branch WebServices --- Source/RunActivity/Content/Web/HUD.html | 52 ++ Source/RunActivity/Content/Web/css/hud.css | 26 + Source/RunActivity/Content/Web/css/sample.css | 26 + .../Content/Web/css/trackmonitor.css | 26 + .../Content/Web/images/or_logo.png | Bin 0 -> 4544 bytes .../Content/Web/images/waverley.jpg | Bin 0 -> 49968 bytes .../Content/Web/images/zig-zag.jpg | Bin 0 -> 69383 bytes .../Content/Web/index - ApiSample.html | 38 + Source/RunActivity/Content/Web/index.html | 18 + .../RunActivity/Content/Web/js/ApiSample.js | 27 + .../Content/Web/js/ApiTrainInfo.js | 15 + Source/RunActivity/Content/Web/js/hud.js | 55 ++ .../Content/Web/js/trackmonitor.js | 16 + Source/RunActivity/RunActivity.csproj | 15 + .../RunActivity/Viewer3D/Popups/HUDWindow.cs | 30 +- Source/RunActivity/Viewer3D/Processes/Game.cs | 11 + .../Viewer3D/Processes/WebServerProcess.cs | 123 ++++ .../Viewer3D/WebServices/Web/HUD.html | 52 ++ .../Viewer3D/WebServices/Web/css/hud.css | 26 + .../Viewer3D/WebServices/Web/css/sample.css | 26 + .../WebServices/Web/css/trackmonitor.css | 26 + .../WebServices/Web/images/or_logo.png | Bin 0 -> 4544 bytes .../WebServices/Web/images/waverley.jpg | Bin 0 -> 49968 bytes .../WebServices/Web/images/zig-zag.jpg | Bin 0 -> 69383 bytes .../WebServices/Web/index - ApiSample.html | 38 + .../Viewer3D/WebServices/Web/index.html | 18 + .../Viewer3D/WebServices/Web/js/ApiSample.js | 27 + .../WebServices/Web/js/ApiTrainInfo.js | 15 + .../Viewer3D/WebServices/Web/js/hud.js | 55 ++ .../WebServices/Web/js/trackmonitor.js | 16 + .../Viewer3D/WebServices/WebServer.cs | 647 ++++++++++++++++++ 31 files changed, 1423 insertions(+), 1 deletion(-) create mode 100644 Source/RunActivity/Content/Web/HUD.html create mode 100644 Source/RunActivity/Content/Web/css/hud.css create mode 100644 Source/RunActivity/Content/Web/css/sample.css create mode 100644 Source/RunActivity/Content/Web/css/trackmonitor.css create mode 100644 Source/RunActivity/Content/Web/images/or_logo.png create mode 100644 Source/RunActivity/Content/Web/images/waverley.jpg create mode 100644 Source/RunActivity/Content/Web/images/zig-zag.jpg create mode 100644 Source/RunActivity/Content/Web/index - ApiSample.html create mode 100644 Source/RunActivity/Content/Web/index.html create mode 100644 Source/RunActivity/Content/Web/js/ApiSample.js create mode 100644 Source/RunActivity/Content/Web/js/ApiTrainInfo.js create mode 100644 Source/RunActivity/Content/Web/js/hud.js create mode 100644 Source/RunActivity/Content/Web/js/trackmonitor.js create mode 100644 Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/HUD.html create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/css/hud.css create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/css/sample.css create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/css/trackmonitor.css create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/images/or_logo.png create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/images/waverley.jpg create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/images/zig-zag.jpg create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/index - ApiSample.html create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/index.html create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/js/ApiSample.js create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/js/ApiTrainInfo.js create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/js/hud.js create mode 100644 Source/RunActivity/Viewer3D/WebServices/Web/js/trackmonitor.js create mode 100644 Source/RunActivity/Viewer3D/WebServices/WebServer.cs diff --git a/Source/RunActivity/Content/Web/HUD.html b/Source/RunActivity/Content/Web/HUD.html new file mode 100644 index 0000000000..48fdb20c99 --- /dev/null +++ b/Source/RunActivity/Content/Web/HUD.html @@ -0,0 +1,52 @@ + + + + OPEN RAILS - Heads Up Display - Common Page + + + + + + + +

Open Rails - Heads Up Display

+
+

+
+
+ + + + + + diff --git a/Source/RunActivity/Content/Web/css/hud.css b/Source/RunActivity/Content/Web/css/hud.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Content/Web/css/hud.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Content/Web/css/sample.css b/Source/RunActivity/Content/Web/css/sample.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Content/Web/css/sample.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Content/Web/css/trackmonitor.css b/Source/RunActivity/Content/Web/css/trackmonitor.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Content/Web/css/trackmonitor.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Content/Web/images/or_logo.png b/Source/RunActivity/Content/Web/images/or_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4023551997cfdaa56623af9403152bed4ad45e44 GIT binary patch literal 4544 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 literal 0 HcmV?d00001 diff --git a/Source/RunActivity/Content/Web/images/zig-zag.jpg b/Source/RunActivity/Content/Web/images/zig-zag.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6aa99c447f5374cfe875722678f048728dfa4ecd GIT binary patch literal 69383 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 LrI?*Cx-b9PKH4w} literal 0 HcmV?d00001 diff --git a/Source/RunActivity/Content/Web/index - ApiSample.html b/Source/RunActivity/Content/Web/index - ApiSample.html new file mode 100644 index 0000000000..9e297fa70d --- /dev/null +++ b/Source/RunActivity/Content/Web/index - ApiSample.html @@ -0,0 +1,38 @@ + + + + OPEN RAILS - Sample API + + + + + +

Open Rails Web Server - Api Sample

+ + + Sample String Data: +

+ Sample Integer Data: +

+ Date Data: +

+ + String Array Members: +
+
+
+
+

+ + Embedded Class:
+ Embedded String Data: +

+ Embedded Integer Data: +

+ + + + + + + diff --git a/Source/RunActivity/Content/Web/index.html b/Source/RunActivity/Content/Web/index.html new file mode 100644 index 0000000000..ac7c2106b2 --- /dev/null +++ b/Source/RunActivity/Content/Web/index.html @@ -0,0 +1,18 @@ + + + + OPEN RAILS - TrainInfo API + + + + + +

Open Rails Web Server - Api TrainInfo

+ +

+ + + + + + diff --git a/Source/RunActivity/Content/Web/js/ApiSample.js b/Source/RunActivity/Content/Web/js/ApiSample.js new file mode 100644 index 0000000000..284449a278 --- /dev/null +++ b/Source/RunActivity/Content/Web/js/ApiSample.js @@ -0,0 +1,27 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + +function ApiSample() { + hr.open("POST", "/API/APISAMPLE", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + strData.innerHTML = obj.strData; + intData.innerHTML = obj.intData; + dateData.innerHTML = obj.dateData; + + arrayData = obj.strArrayData; + + arrayMember0.innerHTML = obj.strArrayData[0]; + arrayMember1.innerHTML = obj.strArrayData[1]; + arrayMember2.innerHTML = obj.strArrayData[2]; + arrayMember3.innerHTML = obj.strArrayData[3]; + arrayMember4.innerHTML = obj.strArrayData[4]; + + embeddedStr.innerHTML = obj.embedded.Str; + embeddedNumb.innerHTML = obj.embedded.Numb; + + } + } +} diff --git a/Source/RunActivity/Content/Web/js/ApiTrainInfo.js b/Source/RunActivity/Content/Web/js/ApiTrainInfo.js new file mode 100644 index 0000000000..5b91bfd1d7 --- /dev/null +++ b/Source/RunActivity/Content/Web/js/ApiTrainInfo.js @@ -0,0 +1,15 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + +function ApiTrainInfo() { + hr.open("POST", "/API/TRAININFO", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + + strTrainInfoData.innerHTML = obj.allowedSpeedMps; + + } + } +} \ No newline at end of file diff --git a/Source/RunActivity/Content/Web/js/hud.js b/Source/RunActivity/Content/Web/js/hud.js new file mode 100644 index 0000000000..b13effccb9 --- /dev/null +++ b/Source/RunActivity/Content/Web/js/hud.js @@ -0,0 +1,55 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + + +function HeadsUp () { + hr.open("POST", "/API/HUD", true); + hr.send("pageno="+PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + var Rows = obj.commonTable.nRows; + var Cols = obj.commonTable.nCols; + Str = ""; + var next = 0; + for (var row = 0; row < obj.commonTable.nRows; ++row) { + Str += ""; + for (var col=0; col < obj.commonTable.nCols; ++col) { + if (obj.commonTable.values[next] == null) { + Str += ""; + } + else { + Str += ""; + } + ++next; + } + Str += ""; + } + Str += "
" + obj.commonTable.values[next] + "
"; + HUDCommon.innerHTML = Str; + + if (obj.nTables == 2) { + var Rows = obj.extraTable.nRows; + var Cols = obj.extraTable.nCols; + next = 0; + Str = ""; + for (var row = 0; row < obj.extraTable.nRows; ++row) { + Str += ""; + for (var col=0; col < obj.extraTable.nCols; ++col) { + if (obj.extraTable.values[next] == null) { + Str += ""; + } + else { + Str += ""; + } + ++next; + } + Str += ""; + } + Str += "
" + obj.extraTable.values[next] + "
"; + HUDExtra.innerHTML = Str; + } + } + } +} + diff --git a/Source/RunActivity/Content/Web/js/trackmonitor.js b/Source/RunActivity/Content/Web/js/trackmonitor.js new file mode 100644 index 0000000000..337a8aca0c --- /dev/null +++ b/Source/RunActivity/Content/Web/js/trackmonitor.js @@ -0,0 +1,16 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + + +function TrackMonitor () { + hr.open("POST", "/API/TRACKMONITOR", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + var Str = obj.str; + common.innerHTML = Str; + } + } +} + diff --git a/Source/RunActivity/RunActivity.csproj b/Source/RunActivity/RunActivity.csproj index bda7aa977c..fb3ff6beb8 100644 --- a/Source/RunActivity/RunActivity.csproj +++ b/Source/RunActivity/RunActivity.csproj @@ -148,6 +148,7 @@ + @@ -173,6 +174,7 @@ + @@ -323,6 +325,19 @@ PreserveNewest + + + + + + + + + + + + + diff --git a/Source/RunActivity/Viewer3D/Popups/HUDWindow.cs b/Source/RunActivity/Viewer3D/Popups/HUDWindow.cs index a5b55d0dae..55769e1be2 100644 --- a/Source/RunActivity/Viewer3D/Popups/HUDWindow.cs +++ b/Source/RunActivity/Viewer3D/Popups/HUDWindow.cs @@ -264,6 +264,19 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull) } } + // ========================================================================================================================================== + // Method to construct the various Heads Up Display pages for use by the WebServer + // Replaces the Prepare Frame Method + // djr - 20171221 + // ========================================================================================================================================== + public TableData PrepareTable(int PageNo) + { + var table = new TableData() { Cells = new string[1, 1] }; + + TextPages[PageNo](table); + return (table); + } + public override void Draw(SpriteBatch spriteBatch) { // Completely customise the rendering of the HUD - don't call base.Draw(spriteBatch). @@ -307,7 +320,22 @@ public override void Draw(SpriteBatch spriteBatch) } #region Table handling - sealed class TableData + + + // ========================================================================================================================================== + // Class used to construct table for display of Heads Up Display pages + // Original Code has been altered making the class public for use by the WebServer + // djr - 20171221 + // ========================================================================================================================================== + //sealed class TableData + //{ + // public string[,] Cells; + // public int CurrentRow; + // public int CurrentLabelColumn; + // public int CurrentValueColumn; + //} + + public sealed class TableData { public string[,] Cells; public int CurrentRow; diff --git a/Source/RunActivity/Viewer3D/Processes/Game.cs b/Source/RunActivity/Viewer3D/Processes/Game.cs index c2b433ca84..a90a10cdd0 100644 --- a/Source/RunActivity/Viewer3D/Processes/Game.cs +++ b/Source/RunActivity/Viewer3D/Processes/Game.cs @@ -66,11 +66,18 @@ public class Game : Microsoft.Xna.Framework.Game /// public LoaderProcess LoaderProcess { get; private set; } + + /// /// Exposes access to the for the game. /// public SoundProcess SoundProcess { get; private set; } + /// + /// Exposes access to the for the game. + /// + public WebServerProcess WebServerProcess { get; private set; } + /// /// Gets the current , if there is one, or null. /// @@ -92,6 +99,7 @@ public Game(UserSettings settings) UpdaterProcess = new UpdaterProcess(this); LoaderProcess = new LoaderProcess(this); SoundProcess = new SoundProcess(this); + WebServerProcess = new WebServerProcess(this); States = new Stack(); } @@ -99,6 +107,7 @@ public Game(UserSettings settings) protected override void BeginRun() { // At this point, GraphicsDevice is initialized and set up. + WebServerProcess.Start(); SoundProcess.Start(); LoaderProcess.Start(); UpdaterProcess.Start(); @@ -147,6 +156,8 @@ protected override void EndRun() { base.EndRun(); WatchdogProcess.Stop(); + WatchdogProcess.Stop(); + // WJC Kill thread RenderProcess.Stop(); UpdaterProcess.Stop(); LoaderProcess.Stop(); diff --git a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs new file mode 100644 index 0000000000..43cf02cf29 --- /dev/null +++ b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs @@ -0,0 +1,123 @@ +// COPYRIGHT 2009, 2010, 2011, 2012, 2013, 2014 by the Open Rails project. +// +// This file is part of Open Rails. +// +// Open Rails is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Open Rails is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Open Rails. If not, see . + +// This file is the responsibility of the 3D & Environment Team. + + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Threading; +using Orts.Viewer3D; +using Orts.Viewer3D.WebServices; +using ORTS.Common; +using ORTS.Settings; +using Orts.Processes; + +namespace Orts.Viewer3D.Processes +{ + public class WebServerProcess + { + public readonly Profiler Profiler = new Profiler("WebServer"); + readonly ProcessState State = new ProcessState("WebServer"); + readonly Game Game; + readonly Thread Thread; + // readonly WatchdogToken WatchdogToken; + // readonly CancellationTokenSource CancellationTokenSource; + + WebServer webServer; + + public WebServerProcess(Game game) + { + Game = game; + Thread = new Thread(WebServerThread); + // WatchdogToken = new WatchdogToken(Thread); + // WatchdogToken.SpecialDispensationFactor = 6; // ??? + // CancellationTokenSource = new CancellationTokenSource(WatchdogToken.Ping); + } + + public void Start() + { + Thread.Start(); + } + + public void Stop() + { + webServer.stop(); + + // Game.WatchdogProcess.Unregister(WatchdogToken); + // CancellationTokenSource.Cancel(); + State.SignalTerminate(); + } + + public bool Finished + { + get + { + return State.Finished; + } + } + + /// + /// Returns a token (copyable object) which can be queried for the cancellation (termination) of the loader. + /// + /// + /// + /// All loading code should periodically (e.g. between loading each file) check the token and exit as soon + /// as it is cancelled (). + /// + /// + /// Reading causes the to + /// be pinged, informing the that the loader is still responsive. Therefore the + /// remarks about the method apply to the token regarding when it should + /// and should not be used. + /// + /// + //public CancellationToken CancellationToken + //{ + // get + // { + // return CancellationTokenSource.Token; + // } + //} + + public void WaitTillFinished() + { + State.WaitTillFinished(); + } + + [ThreadName("WebServer")] + void WebServerThread() + { + Profiler.SetThread(); + Game.SetThreadLanguage(); + + // ////////////////////////////////////////////////////////////////// + + + var myWebContentPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), + "Content\\Web"); + + webServer = new WebServer("127.0.0.1", 2150, 1, myWebContentPath); + //webServer = new WebServer("192.168.1.114", 2150, 1, myWebContentPath); + + webServer.Run(); + } + } +} diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/HUD.html b/Source/RunActivity/Viewer3D/WebServices/Web/HUD.html new file mode 100644 index 0000000000..48fdb20c99 --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/HUD.html @@ -0,0 +1,52 @@ + + + + OPEN RAILS - Heads Up Display - Common Page + + + + + + + +

Open Rails - Heads Up Display

+
+

+
+
+ + + + + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/css/hud.css b/Source/RunActivity/Viewer3D/WebServices/Web/css/hud.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/css/hud.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/css/sample.css b/Source/RunActivity/Viewer3D/WebServices/Web/css/sample.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/css/sample.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/css/trackmonitor.css b/Source/RunActivity/Viewer3D/WebServices/Web/css/trackmonitor.css new file mode 100644 index 0000000000..2839e1b3af --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/css/trackmonitor.css @@ -0,0 +1,26 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: #333; +} +li { + float: left; + border-right:1px solid #bbb; +} +li:last-child { + border-right: none; +} +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} +li a:hover:not(.active) { + background-color: #111; +} + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/images/or_logo.png b/Source/RunActivity/Viewer3D/WebServices/Web/images/or_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4023551997cfdaa56623af9403152bed4ad45e44 GIT binary patch literal 4544 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 literal 0 HcmV?d00001 diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/images/zig-zag.jpg b/Source/RunActivity/Viewer3D/WebServices/Web/images/zig-zag.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6aa99c447f5374cfe875722678f048728dfa4ecd GIT binary patch literal 69383 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 LrI?*Cx-b9PKH4w} literal 0 HcmV?d00001 diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/index - ApiSample.html b/Source/RunActivity/Viewer3D/WebServices/Web/index - ApiSample.html new file mode 100644 index 0000000000..9e297fa70d --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/index - ApiSample.html @@ -0,0 +1,38 @@ + + + + OPEN RAILS - Sample API + + + + + +

Open Rails Web Server - Api Sample

+ + + Sample String Data: +

+ Sample Integer Data: +

+ Date Data: +

+ + String Array Members: +
+
+
+
+

+ + Embedded Class:
+ Embedded String Data: +

+ Embedded Integer Data: +

+ + + + + + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/index.html b/Source/RunActivity/Viewer3D/WebServices/Web/index.html new file mode 100644 index 0000000000..ac7c2106b2 --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/index.html @@ -0,0 +1,18 @@ + + + + OPEN RAILS - TrainInfo API + + + + + +

Open Rails Web Server - Api TrainInfo

+ +

+ + + + + + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiSample.js b/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiSample.js new file mode 100644 index 0000000000..284449a278 --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiSample.js @@ -0,0 +1,27 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + +function ApiSample() { + hr.open("POST", "/API/APISAMPLE", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + strData.innerHTML = obj.strData; + intData.innerHTML = obj.intData; + dateData.innerHTML = obj.dateData; + + arrayData = obj.strArrayData; + + arrayMember0.innerHTML = obj.strArrayData[0]; + arrayMember1.innerHTML = obj.strArrayData[1]; + arrayMember2.innerHTML = obj.strArrayData[2]; + arrayMember3.innerHTML = obj.strArrayData[3]; + arrayMember4.innerHTML = obj.strArrayData[4]; + + embeddedStr.innerHTML = obj.embedded.Str; + embeddedNumb.innerHTML = obj.embedded.Numb; + + } + } +} diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiTrainInfo.js b/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiTrainInfo.js new file mode 100644 index 0000000000..5b91bfd1d7 --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/js/ApiTrainInfo.js @@ -0,0 +1,15 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + +function ApiTrainInfo() { + hr.open("POST", "/API/TRAININFO", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + + strTrainInfoData.innerHTML = obj.allowedSpeedMps; + + } + } +} \ No newline at end of file diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/js/hud.js b/Source/RunActivity/Viewer3D/WebServices/Web/js/hud.js new file mode 100644 index 0000000000..b13effccb9 --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/js/hud.js @@ -0,0 +1,55 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + + +function HeadsUp () { + hr.open("POST", "/API/HUD", true); + hr.send("pageno="+PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + var Rows = obj.commonTable.nRows; + var Cols = obj.commonTable.nCols; + Str = ""; + var next = 0; + for (var row = 0; row < obj.commonTable.nRows; ++row) { + Str += ""; + for (var col=0; col < obj.commonTable.nCols; ++col) { + if (obj.commonTable.values[next] == null) { + Str += ""; + } + else { + Str += ""; + } + ++next; + } + Str += ""; + } + Str += "
" + obj.commonTable.values[next] + "
"; + HUDCommon.innerHTML = Str; + + if (obj.nTables == 2) { + var Rows = obj.extraTable.nRows; + var Cols = obj.extraTable.nCols; + next = 0; + Str = ""; + for (var row = 0; row < obj.extraTable.nRows; ++row) { + Str += ""; + for (var col=0; col < obj.extraTable.nCols; ++col) { + if (obj.extraTable.values[next] == null) { + Str += ""; + } + else { + Str += ""; + } + ++next; + } + Str += ""; + } + Str += "
" + obj.extraTable.values[next] + "
"; + HUDExtra.innerHTML = Str; + } + } + } +} + diff --git a/Source/RunActivity/Viewer3D/WebServices/Web/js/trackmonitor.js b/Source/RunActivity/Viewer3D/WebServices/Web/js/trackmonitor.js new file mode 100644 index 0000000000..337a8aca0c --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/Web/js/trackmonitor.js @@ -0,0 +1,16 @@ +var PageNo = 0; +var hr = new XMLHttpRequest; + + +function TrackMonitor () { + hr.open("POST", "/API/TRACKMONITOR", true); + hr.send("pageno=" + PageNo); + hr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + var obj = JSON.parse(hr.responseText); + var Str = obj.str; + common.innerHTML = Str; + } + } +} + diff --git a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs new file mode 100644 index 0000000000..d9029b73be --- /dev/null +++ b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs @@ -0,0 +1,647 @@ +// COPYRIGHT 2009, 2010, 2011, 2012, 2013, 2014 by the Open Rails project. +// +// This file is part of Open Rails. +// +// Open Rails is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Open Rails is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Open Rails. If not, see . +// +// =========================================================================================== +// Open Rails Web Server +// The following files have been modified to accomodate the WebServer +// Game.cs +// HUDWindow.cs +// WebServerProcess.cs +// search for "WebServer" to find all occurrences + +// +// djr - 20171221 +// =========================================================================================== + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using Newtonsoft.Json; +using Orts.Simulation; +using Orts.Simulation.Physics; + +namespace Orts.Viewer3D.WebServices +{ + // ================================================================= + // State object for reading client data asynchronously + // ================================================================= + public class StateObject + { + public Socket WorkSocket = null; // Client socket. + public const int BufferSize = 1024; // Size of receive buffer. + public byte[] Buffer = new byte[BufferSize]; // Receive buffer. + } + + // ================================================================== + // class for holding HTTP Request data + // ================================================================== + public class HttpRequest + { + public Socket ClientSocket = null; + public string Method = ""; + public string URI = ""; + public string Parameters; + public Dictionary headers = new Dictionary(); + public Dictionary Headers { get => headers; set => headers = value; } + } + + // ================================================================== + // class for holding HTTP Resonse data + // ================================================================== + public class HttpResponse + { + public Socket ClientSocket = null; + public string ResponseCode = ""; + public string ContentType = ""; + public string strContent = ""; + public byte[] byteContent; + } + + // ==================================================================== + // TCP/IP Sockets WebServer + // ==================================================================== + public class WebServer + { + private bool Running = false; + private int timeout = 10; + private Socket ServerSocket = null; + private static Encoding CharEncoder = Encoding.UTF8; + private static string ContentPath = ""; + private IPAddress ipAddress = null; + private int Port = 0; + private int MaxConnections = 0; + + // =========================================================================================== + // Thread signal. + // =========================================================================================== + private static ManualResetEvent allDone = new ManualResetEvent(false); + + // =========================================================================================== + // File exstensions this server will handle - any other extensions are returns as not found + // =========================================================================================== + private static Dictionary extensions = new Dictionary() + { + { "htm", "text/html" }, + { "html", "text/html" }, + { "txt", "text/plain" }, + { "css", "text/css" }, + { "xml", "application/xml" }, + { "js", "application/javascript" }, + { "json", "application/json" }, + { "ico", "image/x-icon" }, + { "png", "image/png" }, + { "gif", "image/gif" }, + { "jpg", "image/jpg" }, + { "jpeg", "image/jpeg" } + }; + + public Dictionary Extensions { get => extensions; set => extensions = value; } + + // =========================================================================================== + // Viewer object from Viewer3D - needed for acces to Heads Up Display Data + // =========================================================================================== + public Viewer viewer; + + // =========================================================================================== + // WebServer constructor + // =========================================================================================== + public WebServer(string ipAddr, int port, int maxConnections, string path) + { + ipAddress = IPAddress.Parse(ipAddr); + Port = port; + ContentPath = path; + MaxConnections = maxConnections; + ApiDict.Add("/API/HUD", ApiHUD); + ApiDict.Add("/API/APISAMPLE", ApiSample); + ApiDict.Add("/API/TRACKMONITOR", ApiTrackMonitor); + ApiDict.Add("/API/TRAININFO", ApiTrainInfo); + return; + } + + // =========================================================================================== + // =========================================================================================== + public void Run() + { + if (Running) + return; + + // Viewer is not yet initialized in the GameState object - wait until it is + while ((viewer = Program.Viewer) == null) + Thread.Sleep(1000); + + try + { + ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + ServerSocket.Bind(new IPEndPoint(ipAddress, Port)); + ServerSocket.Listen(MaxConnections); + ServerSocket.ReceiveTimeout = timeout; + ServerSocket.SendTimeout = timeout; + } + catch (Exception e) + { + Console.WriteLine("Exception Bind Socket: " + e.Message); + return; + } + while (true) + { + Running = true; + // Set the event to nonsignaled state. + allDone.Reset(); + + try + { + // Start an asynchronous socket to listen for connections. + ServerSocket.BeginAccept(new AsyncCallback(acceptCallback), ServerSocket); + } + catch (Exception e) + { + Console.WriteLine("100 Exception calling BeginAccept: " + e.Message); + } + // TODO: + // Break out of any waiting states + // Break out of any async states + // Close down any open sockets !!!! + if (!Running) + { + break; + } + // Wait until a connection is made before continuing. + //Trace.WriteLine("WebServer is waiting for a connection"); + allDone.WaitOne(); + } + } + + // =========================================================================================== + // =========================================================================================== + public void acceptCallback(IAsyncResult ar) + { + // wjc if we stopped the thread just leave + if (Running) + { + // Signal the main thread to continue. + allDone.Set(); + // Get the socket that handles the client request. + Socket listener = (Socket)ar.AsyncState; + Socket handler = listener.EndAccept(ar); + // Create the state object. + StateObject state = new StateObject(); + state.WorkSocket = handler; + handler.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(receiveCallback), + state); + } + } + + // =========================================================================================== + // Main processing loop - read request and call response functions + // =========================================================================================== + public static void receiveCallback(IAsyncResult ar) + { + // Retrieve the state object and the handler socket + // from the asynchronous state object. + StateObject state = (StateObject)ar.AsyncState; + StreamReader streamReader; + HttpRequest request = new HttpRequest(); + HttpResponse response = new HttpResponse(); + request.ClientSocket = state.WorkSocket; + response.ClientSocket = state.WorkSocket; + try + { + int bytesReceived = request.ClientSocket.EndReceive(ar); + streamReader = new StreamReader(new MemoryStream(state.Buffer, 0, bytesReceived)); + } + catch (Exception e) + { + Console.WriteLine("Exception instantiate StreamReader: " + e.Message); + return; + } + while (streamReader.Peek() > -1) + { + string lineRead = streamReader.ReadLine(); + if (lineRead.Length == 0) + { + if (request.Method.Equals("POST")) + { + request.Parameters = streamReader.ReadToEnd(); + ProcessPost(request, response); + } + else if (request.Method.Equals("GET")) + { + ProcessGet(request, response); + } + else + sendNotImplemented(response); + return; + } + else if (request.Method.Equals("")) + { + try + { + request.Method = lineRead.Substring(0, lineRead.IndexOf(" ")); + request.Method.Trim(); + int start = lineRead.IndexOf('/'); + int length = lineRead.LastIndexOf(" ") - start; + request.URI = lineRead.Substring(start, length); + } + catch (Exception e) + { + Console.WriteLine("httpMethod: " + e.Message); + } + + if (!request.Method.Equals("GET") && !request.Method.Equals("POST")) + { + sendNotImplemented(response); + return; + } + } + else + { + try + { + int seperator = lineRead.IndexOf(':'); + string heading = lineRead.Substring(0, seperator); + heading = heading.Trim(); + ++seperator; + string value = lineRead.Substring(seperator); + value = value.Trim(); + request.Headers.Add(heading, value); + } + catch (Exception e) + { + Console.WriteLine(e.Message); + } + } + if (streamReader.EndOfStream) + { + break; + } + } + sendServerError(response); + } + + // =========================================================================================== + // =========================================================================================== + public void stop() + { + if (Running) + { + Running = false; + // TODO: + // Will Shutdown and close break out of any async waiting states?? + try + { + // wjc we are just streaming for now, so make sure the socket closes at end of game + // so that the socket is not hung when opening again + //ServerSocket.Shutdown(SocketShutdown.Both); + ServerSocket.Close(); + } + catch (Exception e) + { + //Console.WriteLine(e.Message); + Trace.WriteLine("WebServer", e.Message); + } + ServerSocket = null; + } + } + + // =========================================================================================== + // =========================================================================================== + private static void ProcessPost(HttpRequest request, HttpResponse response) + { + request.URI = request.URI.Replace('\\', '/'); + request.URI = request.URI.ToUpper(); + if (!request.URI.StartsWith("/API/")) + { + Console.WriteLine("Post Method - API Not Implemented [{0}]", request.URI); + sendNotImplemented(response); + return; + } + response.strContent = ExecuteApi(request.URI, request.Parameters); + response.ContentType = "application/json"; + sendOkResponse(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void ProcessGetAPI(HttpRequest request, HttpResponse response) + { + sendNotImplemented(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void ProcessGet(HttpRequest request, HttpResponse response) + { + request.URI = request.URI.Replace("/", "\\").Replace("\\..", ""); + if (request.URI.StartsWith("/API/")) + { + ProcessGetAPI(request, response); + return; + } + int length = request.URI.Length; + int start = request.URI.LastIndexOf('.'); + if (start == -1) + { + if (request.URI.Substring(length - 1, 1) != "\\") + request.URI += "\\"; + request.URI += "index.html"; + } + start = request.URI.LastIndexOf('.'); + length = request.URI.Length - start - 1; + string extension = request.URI.Substring(start + 1, length); + if (extensions.ContainsKey(extension)) + { + if (File.Exists(ContentPath + request.URI)) + { + byte[] bytes = File.ReadAllBytes(ContentPath + request.URI); + response.byteContent = new byte[bytes.Length]; + response.byteContent = bytes; + response.ContentType = extensions[extension]; + sendOkResponse(response); + } + else + sendNotFound(response); // We don't support this extension. We are assuming that it doesn't exist. + } + else + sendNotImplemented(response); + return; + } + + // =========================================================================================== + // =========================================================================================== + private static void HTMLContent(HttpResponse response) + { + response.strContent = "" + + "" + + "" + + "" + + "" + + "" + + "

OpenRails WebServer

" + + "
" + response.ResponseCode + "
" + "" + + ""; + + return; + } + + // =========================================================================================== + // =========================================================================================== + private static void sendNotImplemented(HttpResponse response) + { + response.ResponseCode = "501 Not Implemented"; + HTMLContent(response); + SendHttp(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void sendNotFound(HttpResponse response) + { + response.ResponseCode = "404 Not Found"; + HTMLContent(response); + SendHttp(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void sendServerError(HttpResponse response) + { + response.ResponseCode = "500 Internal Server Error"; + HTMLContent(response); + SendHttp(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void sendOkResponse(HttpResponse response) + { + response.ResponseCode = "200 OK"; + SendHttp(response); + } + + // =========================================================================================== + // =========================================================================================== + private static void SendHttp(HttpResponse response) + { + // Convert the string data to byte data using ASCII encoding. + if (response.strContent.Length > 0) + { + response.byteContent = Encoding.ASCII.GetBytes(response.strContent); + } + byte[] byteData = CharEncoder.GetBytes( + "HTTP/1.1 " + response.ResponseCode + "\r\n" + + "Server: OpenRails WebServer\r\n" + + "Content-Length: " + response.byteContent.Length.ToString() + "\r\n" + + "Connection: close\r\n" + + "Content-Type: " + response.ContentType + "\r\n" + + "Cache-Control: no-cache \r\n\r\n" + + System.Text.Encoding.UTF8.GetString(response.byteContent)); + + // Begin sending the data to the remote device. + response.ClientSocket.BeginSend(byteData, 0, + byteData.Length, 0, + new AsyncCallback(SendHttpCallback), + response.ClientSocket); + } + + // =========================================================================================== + // =========================================================================================== + private static void SendHttpCallback(IAsyncResult ar) + { + try + { + // Retrieve the socket from the state object. + Socket clientSocket = (Socket)ar.AsyncState; + + // Complete sending the data to the remote device. + int bytesSent = clientSocket.EndSend(ar); + + clientSocket.Shutdown(SocketShutdown.Both); + clientSocket.Close(); + } + catch (Exception e) + { + Console.WriteLine("Exception Send CallBack: " + e.ToString()); + } + } + + // =========================================================================================== + // API routing classes & functions + // =========================================================================================== + public static Dictionary> ApiDict = new Dictionary>(); + + public static string ExecuteApi(string apiName, string Parameters) + { + Func apiMethod; + if (!ApiDict.TryGetValue(apiName, out apiMethod)) + { + Console.WriteLine("Not Found"); //TODO + } + object result = apiMethod(Parameters); + string json = JsonConvert.SerializeObject(result, Formatting.Indented); + return json; + } + + // ======================================================================================= + // API for Sample Data + // ======================================================================================= + + + public class Embedded + { + public string Str; + public int Numb; + } + public class ApiSampleData + { + public int intData; + public string strData; + public DateTime dateData; + public Embedded embedded; + public string[] strArrayData; + } + + // ------------------------------------------------------------------------------------------- + public object ApiSample(string Parameters) + { + ApiSampleData sampleData = new ApiSampleData(); + + sampleData.intData = 576; + sampleData.strData = "Sample String"; + sampleData.dateData = new DateTime(2018, 1, 1); + + sampleData.embedded = new Embedded(); + sampleData.embedded.Str = "Embeddded String"; + sampleData.embedded.Numb = 123; + + sampleData.strArrayData = new string[5]; + + sampleData.strArrayData[0] = "First member"; + sampleData.strArrayData[1] = "Second member"; + sampleData.strArrayData[2] = "Third Member"; + sampleData.strArrayData[3] = "Forth member"; + sampleData.strArrayData[4] = "Fifth member"; + + return (sampleData); + } + + // ======================================================================================= + // API to display the HUD Windows + // ======================================================================================= + public class HudApiTable + { + public int nRows; + public int nCols; + public string[] values; + } + + // ------------------------------------------------------------------------------------------- + public class HudApiArray + { + public int nTables; + public HudApiTable commonTable; + public HudApiTable extraTable; + } + + + // ------------------------------------------------------------------------------------------- + public object ApiHUD(string Parameters) + { + int index = Parameters.IndexOf('='); + if (index == -1) + return (null); + string strPageno = Parameters.Substring(index + 1, Parameters.Length - index - 1); + strPageno = strPageno.Trim(); + int pageNo = Int32.Parse(strPageno); + + HudApiArray hudApiArray = new HudApiArray(); + hudApiArray.nTables = 1; + + hudApiArray.commonTable = ApiHUD_ProcessTable(0); + if (pageNo > 0) + { + hudApiArray.nTables = 2; + hudApiArray.extraTable = ApiHUD_ProcessTable(pageNo); + } + return hudApiArray; + } + + // ------------------------------------------------------------------------------------------- + public HudApiTable ApiHUD_ProcessTable(int pageNo) + { + int nRows = 0; + int nCols = 0; + int nextCell = 0; + + Viewer3D.Popups.HUDWindow.TableData hudTable = viewer.HUDWindow.PrepareTable(pageNo); + + HudApiTable apiTable = new HudApiTable(); + + apiTable.nRows = hudTable.Cells.GetLength(0); + nRows = apiTable.nRows; + apiTable.nCols = hudTable.Cells.GetLength(1); + nCols = apiTable.nCols; + apiTable.values = new string[nRows * nCols]; + + try + { + for (int i = 0; i < nRows; ++i) + { + for (int j = 0; j < nCols; ++j) + { + apiTable.values[nextCell++] = hudTable.Cells[i, j]; + } + } + } + catch (Exception e) + { + Trace.WriteLine(e.Message); + } + return (apiTable); + } + + // ======================================================================================= + // API for Track Monitor Data + // ======================================================================================= + + // ------------------------------------------------------------------------------------------- + public object ApiTrackMonitor(string Parameters) + { + Train.TrainInfo trainInfo = viewer.PlayerTrain.GetTrainInfo(); + + return (trainInfo); + + } + + // ======================================================================================= + // API for Train Info + // ======================================================================================= + + // ------------------------------------------------------------------------------------------- + public object ApiTrainInfo(string Parameters) + { + Train.TrainInfo trainInfo = viewer.PlayerTrain.GetTrainInfo(); + + return (trainInfo); + } + } +} \ No newline at end of file From 5a6a677bbfaa81145767ba02c905bbf7e947da13 Mon Sep 17 00:00:00 2001 From: peternewell Date: Sat, 21 Dec 2019 20:32:07 +1100 Subject: [PATCH 15/21] Correct issue with dynamic brake where it doesn't go to zero in Nothc 0. --- .../Simulation/RollingStocks/MSTSLocomotive.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs index 2e921365e8..ca32ec0eeb 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs @@ -1403,6 +1403,7 @@ public override void Update(float elapsedClockSeconds) ApplyDirectionToMotiveForce(); + // Update dynamic brake force if (DynamicBrakePercent > 0 && DynamicBrakeForceCurves != null && AbsSpeedMpS > 0) { float f = DynamicBrakeForceCurves.Get(.01f * DynamicBrakePercent, AbsSpeedMpS); @@ -1415,7 +1416,8 @@ public override void Update(float elapsedClockSeconds) DynamicBrakeForceN = 0f; } } -// else if (DynamicBrakePercent == -1) DynamicBrakeForceN = 0; + else + DynamicBrakeForceN = 0; // Set dynamic brake force to zero if in Notch 0 UpdateFrictionCoefficient(elapsedClockSeconds); // Find the current coefficient of friction depending upon the weather From cf5bbe99c73174d2efb2b1e4222fd8f4ff69a590 Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Sat, 21 Dec 2019 11:57:49 -0800 Subject: [PATCH 16/21] Changed to IPAddress.Any in WebServer.cs to accept any address on the local Lan --- Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs | 3 ++- Source/RunActivity/Viewer3D/WebServices/WebServer.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs index 43cf02cf29..7d5be6e9eb 100644 --- a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs +++ b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs @@ -114,8 +114,9 @@ void WebServerThread() var myWebContentPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), "Content\\Web"); + // 127.0.0.1 is a dummy, IPAddress.Any in WebServer.cs to accept any address + // on the local Lan webServer = new WebServer("127.0.0.1", 2150, 1, myWebContentPath); - //webServer = new WebServer("192.168.1.114", 2150, 1, myWebContentPath); webServer.Run(); } diff --git a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs index d9029b73be..775bdaa691 100644 --- a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs +++ b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs @@ -151,7 +151,7 @@ public void Run() try { ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - ServerSocket.Bind(new IPEndPoint(ipAddress, Port)); + ServerSocket.Bind(new IPEndPoint(IPAddress.Any, Port)); ServerSocket.Listen(MaxConnections); ServerSocket.ReceiveTimeout = timeout; ServerSocket.SendTimeout = timeout; From 8a855efc6213ad861802f6048c8560bb5f3ddd26 Mon Sep 17 00:00:00 2001 From: peternewell Date: Sun, 22 Dec 2019 08:10:36 +1100 Subject: [PATCH 17/21] force update of code change --- .../Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs index ca32ec0eeb..dc2e8f952b 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs @@ -1417,7 +1417,7 @@ public override void Update(float elapsedClockSeconds) } } else - DynamicBrakeForceN = 0; // Set dynamic brake force to zero if in Notch 0 + DynamicBrakeForceN = 0; // Set dynamic brake force to zero if in Notch 0 position UpdateFrictionCoefficient(elapsedClockSeconds); // Find the current coefficient of friction depending upon the weather From acf11db5d663ec4f8bbbace900ecfb33683b0ac1 Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Sun, 22 Dec 2019 19:56:27 -0800 Subject: [PATCH 18/21] Move code out of WatchDog; Had hanging process on termination; Using Tcp similar to MultiPlayer --- Source/RunActivity/Viewer3D/Processes/Game.cs | 4 ++-- Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs | 2 +- Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs | 4 ++++ Source/RunActivity/Viewer3D/WebServices/WebServer.cs | 4 +++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Source/RunActivity/Viewer3D/Processes/Game.cs b/Source/RunActivity/Viewer3D/Processes/Game.cs index a90a10cdd0..8399e27a1b 100644 --- a/Source/RunActivity/Viewer3D/Processes/Game.cs +++ b/Source/RunActivity/Viewer3D/Processes/Game.cs @@ -156,12 +156,12 @@ protected override void EndRun() { base.EndRun(); WatchdogProcess.Stop(); - WatchdogProcess.Stop(); - // WJC Kill thread RenderProcess.Stop(); UpdaterProcess.Stop(); LoaderProcess.Stop(); SoundProcess.Stop(); + // WebServerProcess.Stop(); Again + WebServerProcess.Stop(); } [ThreadName("Render")] diff --git a/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs b/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs index 9482740cfe..da996c4cb5 100644 --- a/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs +++ b/Source/RunActivity/Viewer3D/Processes/GameStateViewer3D.cs @@ -136,7 +136,7 @@ internal override void Load() internal override void Dispose() { Viewer.Terminate(); - if (MPManager.Server != null) + if (MPManager.Server != null) MPManager.Server.Stop(); if (MPManager.Client != null) MPManager.Client.Stop(); diff --git a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs index 7d5be6e9eb..51d74802fa 100644 --- a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs +++ b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs @@ -19,6 +19,7 @@ using System; +using System.Net.Sockets; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -59,11 +60,14 @@ public void Start() public void Stop() { + //public Socket ServerSocket = null; + //Socket ServerSocket.Stop(); webServer.stop(); // Game.WatchdogProcess.Unregister(WatchdogToken); // CancellationTokenSource.Cancel(); State.SignalTerminate(); + Thread.Abort(); } public bool Finished diff --git a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs index 775bdaa691..715fb6aa98 100644 --- a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs +++ b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs @@ -83,7 +83,7 @@ public class WebServer { private bool Running = false; private int timeout = 10; - private Socket ServerSocket = null; + public Socket ServerSocket = null; private static Encoding CharEncoder = Encoding.UTF8; private static string ContentPath = ""; private IPAddress ipAddress = null; @@ -311,7 +311,9 @@ public void stop() // wjc we are just streaming for now, so make sure the socket closes at end of game // so that the socket is not hung when opening again //ServerSocket.Shutdown(SocketShutdown.Both); + //tcpListener.Stop(); ServerSocket.Close(); + } catch (Exception e) { From 15e95d875f341762a352a7bb1fd4e4a281c8ebdc Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Mon, 23 Dec 2019 10:34:36 -0800 Subject: [PATCH 19/21] Place test's in running code, to enable/disable WebServer display --- Source/ORTS.Settings/UserSettings.cs | 6 ++++ Source/RunActivity/Program.cs | 2 ++ .../Viewer3D/Processes/WebServerProcess.cs | 32 +++++++++++++------ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Source/ORTS.Settings/UserSettings.cs b/Source/ORTS.Settings/UserSettings.cs index b8efe06895..4b92a4acf8 100644 --- a/Source/ORTS.Settings/UserSettings.cs +++ b/Source/ORTS.Settings/UserSettings.cs @@ -111,8 +111,14 @@ public enum Menu_SelectionIndex [Default(30000)] public int Multiplayer_Port { get; set; } + + // General settings: [Default(false)] + + public bool WebServer { get; set; } + [Default(false)] + public bool Alerter { get; set; } [Default(true)] public bool AlerterDisableExternal { get; set; } diff --git a/Source/RunActivity/Program.cs b/Source/RunActivity/Program.cs index ee9cace713..4da52d4682 100644 --- a/Source/RunActivity/Program.cs +++ b/Source/RunActivity/Program.cs @@ -54,6 +54,8 @@ static void Main(string[] args) var options = args.Where(a => a.StartsWith("-") || a.StartsWith("/")).Select(a => a.Substring(1)); var settings = new UserSettings(options); + //settings.WebServer = true; + //enables loading of dll for specific architecture(32 or 64bit) from distinct folders, useful when both versions require same name (as for OpenAL32.dll) string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Native"); path = Path.Combine(path, (Environment.Is64BitProcess) ? "X64" : "X86"); diff --git a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs index 51d74802fa..727859e8e5 100644 --- a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs +++ b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs @@ -39,6 +39,7 @@ public class WebServerProcess readonly ProcessState State = new ProcessState("WebServer"); readonly Game Game; readonly Thread Thread; + private bool ThreadActive = false; // readonly WatchdogToken WatchdogToken; // readonly CancellationTokenSource CancellationTokenSource; @@ -46,28 +47,39 @@ public class WebServerProcess public WebServerProcess(Game game) { - Game = game; - Thread = new Thread(WebServerThread); - // WatchdogToken = new WatchdogToken(Thread); - // WatchdogToken.SpecialDispensationFactor = 6; // ??? - // CancellationTokenSource = new CancellationTokenSource(WatchdogToken.Ping); + Game = game; + + Thread = new Thread(WebServerThread); + if (game.Settings.WebServer) + { + ThreadActive = true; + // WatchdogToken = new WatchdogToken(Thread); + // WatchdogToken.SpecialDispensationFactor = 6; // ??? + // CancellationTokenSource = new CancellationTokenSource(WatchdogToken.Ping); + } } public void Start() { - Thread.Start(); + if (ThreadActive) + { + Thread.Start(); + } } public void Stop() { + if (ThreadActive) + { //public Socket ServerSocket = null; //Socket ServerSocket.Stop(); webServer.stop(); - // Game.WatchdogProcess.Unregister(WatchdogToken); - // CancellationTokenSource.Cancel(); - State.SignalTerminate(); - Thread.Abort(); + // Game.WatchdogProcess.Unregister(WatchdogToken); + // CancellationTokenSource.Cancel(); + State.SignalTerminate(); + Thread.Abort(); + } } public bool Finished From 0b6bd8794cfbf1c36a557bbc3aa454fffa23b26c Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Mon, 23 Dec 2019 15:26:49 -0800 Subject: [PATCH 20/21] Added check box in options windows form to enable/disable WebServer display --- Source/Menu/Options.Designer.cs | 13 +++++++++++++ Source/Menu/Options.cs | 3 +++ Source/Menu/Options.resx | 10 +++++----- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Source/Menu/Options.Designer.cs b/Source/Menu/Options.Designer.cs index 89e92e9291..173fd5f728 100644 --- a/Source/Menu/Options.Designer.cs +++ b/Source/Menu/Options.Designer.cs @@ -41,6 +41,7 @@ private void InitializeComponent() this.checkViewDispatcher = new System.Windows.Forms.CheckBox(); this.tabOptions = new System.Windows.Forms.TabControl(); this.tabPageGeneral = new System.Windows.Forms.TabPage(); + this.checkEnableWebServer = new System.Windows.Forms.CheckBox(); this.checkSpeedControl = new System.Windows.Forms.CheckBox(); this.checkDisableTCSScripts = new System.Windows.Forms.CheckBox(); this.labelOtherUnits = new System.Windows.Forms.Label(); @@ -347,6 +348,7 @@ private void InitializeComponent() // // tabPageGeneral // + this.tabPageGeneral.Controls.Add(this.checkEnableWebServer); this.tabPageGeneral.Controls.Add(this.checkSpeedControl); this.tabPageGeneral.Controls.Add(this.checkDisableTCSScripts); this.tabPageGeneral.Controls.Add(this.labelOtherUnits); @@ -372,6 +374,16 @@ private void InitializeComponent() this.tabPageGeneral.Text = "General"; this.tabPageGeneral.UseVisualStyleBackColor = true; // + // checkEnableWebServer + // + this.checkEnableWebServer.AutoSize = true; + this.checkEnableWebServer.Location = new System.Drawing.Point(6, 313); + this.checkEnableWebServer.Name = "checkEnableWebServer"; + this.checkEnableWebServer.Size = new System.Drawing.Size(116, 17); + this.checkEnableWebServer.TabIndex = 15; + this.checkEnableWebServer.Text = "Enable WebServer"; + this.checkEnableWebServer.UseVisualStyleBackColor = true; + // // checkSpeedControl // this.checkSpeedControl.AutoSize = true; @@ -2470,5 +2482,6 @@ private void InitializeComponent() private System.Windows.Forms.NumericUpDown numericActWeatherRandomizationLevel; private System.Windows.Forms.Label label26; private System.Windows.Forms.CheckBox checkShadowAllShapes; + private System.Windows.Forms.CheckBox checkEnableWebServer; } } diff --git a/Source/Menu/Options.cs b/Source/Menu/Options.cs index 03c80f0b6b..7688ac7d11 100644 --- a/Source/Menu/Options.cs +++ b/Source/Menu/Options.cs @@ -148,6 +148,7 @@ public OptionsForm(UserSettings settings, UpdateManager updateManager, bool init comboPressureUnit.Text = Settings.PressureUnit; comboBoxOtherUnits.Text = settings.Units; checkDisableTCSScripts.Checked = Settings.DisableTCSScripts; + checkEnableWebServer.Checked = Settings.WebServer; // Audio tab @@ -436,6 +437,7 @@ void buttonOK_Click(object sender, EventArgs e) Settings.PressureUnit = comboPressureUnit.SelectedValue.ToString(); Settings.Units = comboBoxOtherUnits.SelectedValue.ToString(); Settings.DisableTCSScripts = checkDisableTCSScripts.Checked; + Settings.WebServer = checkEnableWebServer.Checked; // Audio tab Settings.MSTSBINSound = checkMSTSBINSound.Checked; @@ -739,5 +741,6 @@ private void checkPerformanceTuner_Click(object sender, EventArgs e) numericPerformanceTunerTarget.Enabled = checkPerformanceTuner.Checked; labelPerformanceTunerTarget.Enabled = checkPerformanceTuner.Checked; } + } } \ No newline at end of file diff --git a/Source/Menu/Options.resx b/Source/Menu/Options.resx index 7b9a6ebb22..443fce5375 100644 --- a/Source/Menu/Options.resx +++ b/Source/Menu/Options.resx @@ -112,18 +112,18 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 - + 114, 17 - + 17, 17 \ No newline at end of file From 014556efcde373a5b658ba616f7911a9af91701f Mon Sep 17 00:00:00 2001 From: wjcurrey Date: Tue, 24 Dec 2019 07:18:30 -0800 Subject: [PATCH 21/21] Added selectable port, cleaned out comments on WatchDog --- Source/Menu/Options.Designer.cs | 41 ++++++++++++++++- Source/Menu/Options.cs | 3 +- Source/ORTS.Settings/UserSettings.cs | 8 ++-- .../Viewer3D/Processes/WebServerProcess.cs | 46 ++----------------- .../Viewer3D/WebServices/WebServer.cs | 1 - 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/Source/Menu/Options.Designer.cs b/Source/Menu/Options.Designer.cs index 173fd5f728..2d75d4909c 100644 --- a/Source/Menu/Options.Designer.cs +++ b/Source/Menu/Options.Designer.cs @@ -188,6 +188,8 @@ private void InitializeComponent() this.ElevationText = new System.Windows.Forms.Label(); this.checkPreferDDSTexture = new System.Windows.Forms.CheckBox(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.numericWebServerPort = new System.Windows.Forms.NumericUpDown(); + this.label28 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.numericBrakePipeChargingRate)).BeginInit(); this.tabOptions.SuspendLayout(); this.tabPageGeneral.SuspendLayout(); @@ -228,6 +230,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.numericSuperElevationGauge)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericSuperElevationMinLen)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUseSuperElevation)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericWebServerPort)).BeginInit(); this.SuspendLayout(); // // buttonOK @@ -348,6 +351,8 @@ private void InitializeComponent() // // tabPageGeneral // + this.tabPageGeneral.Controls.Add(this.label28); + this.tabPageGeneral.Controls.Add(this.numericWebServerPort); this.tabPageGeneral.Controls.Add(this.checkEnableWebServer); this.tabPageGeneral.Controls.Add(this.checkSpeedControl); this.tabPageGeneral.Controls.Add(this.checkDisableTCSScripts); @@ -377,7 +382,7 @@ private void InitializeComponent() // checkEnableWebServer // this.checkEnableWebServer.AutoSize = true; - this.checkEnableWebServer.Location = new System.Drawing.Point(6, 313); + this.checkEnableWebServer.Location = new System.Drawing.Point(8, 315); this.checkEnableWebServer.Name = "checkEnableWebServer"; this.checkEnableWebServer.Size = new System.Drawing.Size(116, 17); this.checkEnableWebServer.TabIndex = 15; @@ -2253,6 +2258,37 @@ private void InitializeComponent() this.checkPreferDDSTexture.Text = "Load DDS textures in preference to ACE"; this.checkPreferDDSTexture.UseVisualStyleBackColor = true; // + // numericWebServerPort + // + this.numericWebServerPort.Location = new System.Drawing.Point(8, 338); + this.numericWebServerPort.Maximum = new decimal(new int[] { + 65534, + 0, + 0, + 0}); + this.numericWebServerPort.Minimum = new decimal(new int[] { + 1025, + 0, + 0, + 0}); + this.numericWebServerPort.Name = "numericWebServerPort"; + this.numericWebServerPort.Size = new System.Drawing.Size(70, 20); + this.numericWebServerPort.TabIndex = 16; + this.numericWebServerPort.Value = new decimal(new int[] { + 1025, + 0, + 0, + 0}); + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(89, 340); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(66, 13); + this.label28.TabIndex = 17; + this.label28.Text = "Port Number"; + // // OptionsForm // this.AcceptButton = this.buttonOK; @@ -2320,6 +2356,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.numericSuperElevationGauge)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numericSuperElevationMinLen)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUseSuperElevation)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericWebServerPort)).EndInit(); this.ResumeLayout(false); } @@ -2483,5 +2520,7 @@ private void InitializeComponent() private System.Windows.Forms.Label label26; private System.Windows.Forms.CheckBox checkShadowAllShapes; private System.Windows.Forms.CheckBox checkEnableWebServer; + private System.Windows.Forms.NumericUpDown numericWebServerPort; + private System.Windows.Forms.Label label28; } } diff --git a/Source/Menu/Options.cs b/Source/Menu/Options.cs index 7688ac7d11..3608b2eeef 100644 --- a/Source/Menu/Options.cs +++ b/Source/Menu/Options.cs @@ -149,9 +149,10 @@ public OptionsForm(UserSettings settings, UpdateManager updateManager, bool init comboBoxOtherUnits.Text = settings.Units; checkDisableTCSScripts.Checked = Settings.DisableTCSScripts; checkEnableWebServer.Checked = Settings.WebServer; - + numericWebServerPort.Value = Settings.WebServerPort; // Audio tab + checkMSTSBINSound.Checked = Settings.MSTSBINSound; numericSoundVolumePercent.Value = Settings.SoundVolumePercent; numericSoundDetailLevel.Value = Settings.SoundDetailLevel; diff --git a/Source/ORTS.Settings/UserSettings.cs b/Source/ORTS.Settings/UserSettings.cs index 4b92a4acf8..129d78d0d1 100644 --- a/Source/ORTS.Settings/UserSettings.cs +++ b/Source/ORTS.Settings/UserSettings.cs @@ -111,14 +111,14 @@ public enum Menu_SelectionIndex [Default(30000)] public int Multiplayer_Port { get; set; } - - // General settings: - [Default(false)] - public bool WebServer { get; set; } [Default(false)] + public bool WebServer { get; set; } + [Default(2150)] + public int WebServerPort { get; set; } + [Default(false)] public bool Alerter { get; set; } [Default(true)] public bool AlerterDisableExternal { get; set; } diff --git a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs index 727859e8e5..0810a249ca 100644 --- a/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs +++ b/Source/RunActivity/Viewer3D/Processes/WebServerProcess.cs @@ -40,9 +40,6 @@ public class WebServerProcess readonly Game Game; readonly Thread Thread; private bool ThreadActive = false; - // readonly WatchdogToken WatchdogToken; - // readonly CancellationTokenSource CancellationTokenSource; - WebServer webServer; public WebServerProcess(Game game) @@ -53,9 +50,6 @@ public WebServerProcess(Game game) if (game.Settings.WebServer) { ThreadActive = true; - // WatchdogToken = new WatchdogToken(Thread); - // WatchdogToken.SpecialDispensationFactor = 6; // ??? - // CancellationTokenSource = new CancellationTokenSource(WatchdogToken.Ping); } } @@ -71,17 +65,11 @@ public void Stop() { if (ThreadActive) { - //public Socket ServerSocket = null; - //Socket ServerSocket.Stop(); webServer.stop(); - - // Game.WatchdogProcess.Unregister(WatchdogToken); - // CancellationTokenSource.Cancel(); State.SignalTerminate(); Thread.Abort(); } } - public bool Finished { get @@ -90,29 +78,6 @@ public bool Finished } } - /// - /// Returns a token (copyable object) which can be queried for the cancellation (termination) of the loader. - /// - /// - /// - /// All loading code should periodically (e.g. between loading each file) check the token and exit as soon - /// as it is cancelled (). - /// - /// - /// Reading causes the to - /// be pinged, informing the that the loader is still responsive. Therefore the - /// remarks about the method apply to the token regarding when it should - /// and should not be used. - /// - /// - //public CancellationToken CancellationToken - //{ - // get - // { - // return CancellationTokenSource.Token; - // } - //} - public void WaitTillFinished() { State.WaitTillFinished(); @@ -123,17 +88,14 @@ void WebServerThread() { Profiler.SetThread(); Game.SetThreadLanguage(); + int port = Game.Settings.WebServerPort; - // ////////////////////////////////////////////////////////////////// - - - var myWebContentPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), - "Content\\Web"); + var myWebContentPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName( + System.Windows.Forms.Application.ExecutablePath),"Content\\Web"); // 127.0.0.1 is a dummy, IPAddress.Any in WebServer.cs to accept any address // on the local Lan - webServer = new WebServer("127.0.0.1", 2150, 1, myWebContentPath); - + webServer = new WebServer("127.0.0.1", port, 1, myWebContentPath); webServer.Run(); } } diff --git a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs index 715fb6aa98..664df03f40 100644 --- a/Source/RunActivity/Viewer3D/WebServices/WebServer.cs +++ b/Source/RunActivity/Viewer3D/WebServices/WebServer.cs @@ -22,7 +22,6 @@ // HUDWindow.cs // WebServerProcess.cs // search for "WebServer" to find all occurrences - // // djr - 20171221 // ===========================================================================================