@@ -28,7 +28,9 @@ private static async Task Main() {
2828
2929 // Set up session with appropriate logging
3030 var logger = options . EnableConsoleLogger ? new ConsoleLogger ( ) : null ;
31- Session = new Arcor2Session ( logger : logger ) ;
31+ Session = new Arcor2Session ( logger : logger , settings : new Arcor2SessionSettings {
32+ LockingMode = options . EnableLocking ? LockingMode . AutoLock : LockingMode . NoLocks
33+ } ) ;
3234
3335 try {
3436 await EstablishSessionAsync ( ) ;
@@ -59,7 +61,18 @@ private static async Task Main() {
5961 var enableLogger = response . ToLower ( ) . FirstOrDefault ( ) is 'y' ;
6062 ConsoleEx . WriteLinePrefix ( $ "Proceeding with logger { ( enableLogger ? "enabled" : "disabled" ) } .") ;
6163
62- return new Options { EnableConsoleLogger = enableLogger } ;
64+ ConsoleEx . WriteLinePrefix ( "Enable auto-lock? (Y/N)" ) ;
65+
66+ // Use a timeout for the initial setup question
67+ var responseAutoLock = await Task . Run ( ConsoleEx . ReadLinePrefix ) ;
68+ if ( responseAutoLock == null ) {
69+ return null ;
70+ }
71+
72+ var enableAutoLock = responseAutoLock . ToLower ( ) . FirstOrDefault ( ) is 'y' ;
73+ ConsoleEx . WriteLinePrefix ( $ "Proceeding with auto-lock { ( enableAutoLock ? "enabled" : "disabled" ) } .") ;
74+
75+ return new Options { EnableConsoleLogger = enableLogger , EnableLocking = enableAutoLock } ;
6376 }
6477
6578 /// <summary>
@@ -110,18 +123,6 @@ private static async Task RunCommandLoopAsync() {
110123 }
111124
112125 try {
113- if ( command == "!prepre" ) {
114- try {
115- await Session . Scenes . First ( ) . CloseAsync ( true ) ;
116- }
117- catch { }
118-
119- await Session . CreateSceneAsync ( "Sc\x2E \x2F0 jhj" , "ewa" ) ;
120- await Task . Delay ( 200 ) ;
121- await Session . Scenes . First ( ) . SaveAsync ( ) ;
122- continue ;
123- }
124-
125126 await ProcessCommandAsync ( command ) ;
126127 }
127128 catch ( Arcor2Exception ex ) {
@@ -175,7 +176,15 @@ private static async Task ProcessCommandAsync(string text) {
175176 case "!help" :
176177 DisplayHelp ( ) ;
177178 break ;
178-
179+ case "!force_close" :
180+ Environment . FailFast ( "Forced crash." ) ;
181+ break ;
182+ case "!lock" :
183+ await LockAsync ( args ) ;
184+ break ;
185+ case "!unlock" :
186+ await UnlockAsync ( args ) ;
187+ break ;
179188 // Navigation and information commands
180189 case "!ns" or "!navigation_state" :
181190 DisplayNavigationState ( ) ;
@@ -724,6 +733,9 @@ private static void DisplayHelp() =>
724733 !object_types - List all object types and their actions.
725734 !scenes - Lists all in-memory scenes.
726735 !projects - Lists all in-memory projects.
736+ !force_close - Crashes this application.
737+ !lock <ID> - Locks an object.
738+ !unlock <ID> - Unlocks an object.
727739
728740 - Object Type -
729741 !add_object_type <TYPE> <PARENT_TYPE> <DESC> - Adds a new object type.
@@ -980,6 +992,17 @@ await Session.ObjectTypes[args[0]].UpdateObjectModel(
980992 )
981993 ) ;
982994
995+ private static async Task LockAsync ( string [ ] args ) {
996+ var obj = Session . FindById ( args [ 0 ] ) ;
997+ await obj ! . LockAsync ( ) ;
998+ }
999+
1000+ private static async Task UnlockAsync ( string [ ] args ) {
1001+ var obj = Session . FindById ( args [ 0 ] ) ;
1002+ await obj ! . UnlockAsync ( ) ;
1003+ }
1004+
1005+
9831006 private static async Task ReloadScenesAsync ( ) => await Session . ReloadScenesAsync ( ) ;
9841007
9851008 private static async Task UpdateSceneDescriptionAsync ( string [ ] args ) =>
0 commit comments