@@ -17,6 +17,17 @@ class CurrentSystemExecutionState {
17
17
18
18
namespace Ecsact {
19
19
20
+ public enum EntityExecutionStatus : Int32 {
21
+ Idle ,
22
+ PendingLazy ,
23
+ }
24
+
25
+ public enum StreamError : Int32 {
26
+ Ok ,
27
+ /// An invalid or non-stream component ID was passed into the stream.
28
+ InvalidComponentId ,
29
+ }
30
+
20
31
namespace Async {
21
32
public enum ConnectState : Int32 {
22
33
NotConnected ,
@@ -753,13 +764,21 @@ public delegate void AsyncReqCompleteCallback(
753
764
IntPtr callbackUserData
754
765
) ;
755
766
767
+ public delegate void AsyncSessionEventCallback (
768
+ Int32 sessionId ,
769
+ Ecsact . Async . SessionEvent sessionEvent ,
770
+ IntPtr callbackUserData
771
+ ) ;
772
+
756
773
public struct AsyncEventsCollector {
757
774
public AsyncErrorCallback errorCallback ;
758
775
public IntPtr errorCallbackUserData ;
759
776
public AsyncExecSystemErrorCallback asyncExecErrorCallback ;
760
777
public IntPtr asyncExecErrorCallbackUserData ;
761
778
public AsyncReqCompleteCallback asyncReqCompleteCallback ;
762
779
public IntPtr asyncReqCompleteCallbackUserData ;
780
+ public AsyncSessionEventCallback asyncSessionEventCallback ;
781
+ public IntPtr asyncSessionEventCallbackUserData ;
763
782
}
764
783
765
784
static EcsactRuntime ( ) {
@@ -815,32 +834,37 @@ public class Async : ModuleBase {
815
834
} ;
816
835
817
836
internal delegate void ecsact_async_enqueue_execute_options_delegate (
818
- Int32 sessionId ,
837
+ Int32 sessionId ,
819
838
CExecutionOptions executionOptions
820
839
) ;
821
- internal ecsact_async_enqueue_execute_options_delegate ? ecsact_async_enqueue_execution_options ;
840
+ internal
841
+ ecsact_async_enqueue_execute_options_delegate ? ecsact_async_enqueue_execution_options ;
822
842
823
843
internal delegate void ecsact_async_flush_events_delegate (
824
- Int32 sessionId ,
844
+ Int32 sessionId ,
825
845
in ExecutionEventsCollector executionEventsCollector ,
826
846
in AsyncEventsCollector asyncEventsCollector
827
847
) ;
828
848
internal ecsact_async_flush_events_delegate ? ecsact_async_flush_events ;
829
849
830
- internal delegate Int32 ecsact_async_start_delegate ( IntPtr data , Int32 dataLength ) ;
850
+ internal delegate Int32
851
+ ecsact_async_start_delegate ( IntPtr data , Int32 dataLength ) ;
831
852
internal ecsact_async_start_delegate ? ecsact_async_start ;
832
853
833
854
internal delegate void ecsact_async_stop_delegate ( Int32 SessionId ) ;
834
- internal ecsact_async_stop_delegate ? ecsact_async_stop ;
855
+ internal ecsact_async_stop_delegate ? ecsact_async_stop ;
835
856
836
857
internal delegate void ecsact_async_stop_all_delegate ( ) ;
837
858
internal ecsact_async_stop_all_delegate ? ecsact_async_stop_all ;
838
859
839
860
internal delegate void ecsact_async_force_reset_delegate ( ) ;
840
861
internal ecsact_async_force_reset_delegate ? ecsact_async_force_reset ;
841
862
842
- internal delegate int ecsact_async_get_current_tick_delegate ( Int32 sesssionId ) ;
843
- internal ecsact_async_get_current_tick_delegate ? ecsact_async_get_current_tick ;
863
+ internal delegate int ecsact_async_get_current_tick_delegate (
864
+ Int32 sesssionId
865
+ ) ;
866
+ internal
867
+ ecsact_async_get_current_tick_delegate ? ecsact_async_get_current_tick ;
844
868
845
869
internal delegate void ecsact_async_stream_delegate (
846
870
Int32 sessionId ,
@@ -851,7 +875,6 @@ IntPtr indexedFieldValues
851
875
) ;
852
876
internal ecsact_async_stream_delegate ? ecsact_async_stream ;
853
877
854
-
855
878
public delegate void AsyncErrorCallback (
856
879
Ecsact . AsyncError err ,
857
880
Int32 [ ] requestIds
@@ -866,10 +889,11 @@ public delegate void ConnectCallback(
866
889
Int32 connectPort
867
890
) ;
868
891
869
- private AsyncEventsCollector _asyncEvs ;
870
- private List < AsyncErrorCallback > _errCallbacks = new ( ) ;
871
- private List < SystemErrorCallback > _sysErrCallbacks = new ( ) ;
872
- private EcsactRuntime _owner ;
892
+ private AsyncEventsCollector _asyncEvs ;
893
+ private List < AsyncErrorCallback > _errCallbacks = new ( ) ;
894
+ private List < SystemErrorCallback > _sysErrCallbacks = new ( ) ;
895
+ private List < AsyncSessionEventCallback > _sessionEvCallbacks = new ( ) ;
896
+ private EcsactRuntime _owner ;
873
897
874
898
public delegate void ConnectStateChangeHandler (
875
899
Ecsact . Async . ConnectState newState
@@ -886,6 +910,8 @@ internal Async(EcsactRuntime owner) {
886
910
asyncExecErrorCallbackUserData = IntPtr . Zero ,
887
911
asyncReqCompleteCallback = OnAsyncReqCompleteHandler ,
888
912
asyncReqCompleteCallbackUserData = IntPtr . Zero ,
913
+ asyncSessionEventCallback = OnAsyncSessionEventHandler ,
914
+ asyncSessionEventCallbackUserData = IntPtr . Zero ,
889
915
} ;
890
916
}
891
917
@@ -934,19 +960,42 @@ IntPtr callbackUserData
934
960
// TODO: report done requests
935
961
}
936
962
963
+ [ AOT . MonoPInvokeCallback ( typeof ( AsyncSessionEventCallback ) ) ]
964
+ public static void OnAsyncSessionEventHandler (
965
+ Int32 sessionId ,
966
+ Ecsact . Async . SessionEvent sessionEvent ,
967
+ IntPtr callbackUserData
968
+ ) {
969
+ var self = ( GCHandle . FromIntPtr ( callbackUserData ) . Target as Async ) ! ;
970
+ foreach ( var cb in self . _sessionEvCallbacks ) {
971
+ cb ( sessionId , sessionEvent ) ;
972
+ }
973
+ }
974
+
937
975
public Action OnSystemError ( SystemErrorCallback callback ) {
938
976
_sysErrCallbacks . Add ( callback ) ;
939
-
940
977
return ( ) => { _sysErrCallbacks . Remove ( callback ) ; } ;
941
978
}
942
979
980
+ public delegate void AsyncSessionEventCallback (
981
+ Int32 sessionId ,
982
+ Ecsact . Async . SessionEvent sessionEvent
983
+ ) ;
984
+
985
+ public Action OnSessionEvent ( AsyncSessionEventCallback callback ) {
986
+ _sessionEvCallbacks . Add ( callback ) ;
987
+ return ( ) => { _sessionEvCallbacks . Remove ( callback ) ; } ;
988
+ }
989
+
943
990
/**
944
991
* Wrapper for `ecsact_async_start`
945
992
*/
946
993
public Int32 Start ( byte [ ] optionData ) {
947
994
if ( ecsact_async_start == null ) {
948
995
throw new EcsactRuntimeMissingMethod ( "ecsact_async_start" ) ;
949
996
}
997
+
998
+ throw new Exception ( "TODO" ) ;
950
999
}
951
1000
952
1001
/**
@@ -960,14 +1009,39 @@ public void Stop(Int32 sessionId) {
960
1009
ecsact_async_stop ( sessionId ) ;
961
1010
}
962
1011
1012
+ /**
1013
+ * Wrapper for `ecsact_async_stop_all`
1014
+ */
1015
+ public void StopAll ( ) {
1016
+ if ( ecsact_async_stop_all == null ) {
1017
+ throw new EcsactRuntimeMissingMethod ( "ecsact_async_stop_all" ) ;
1018
+ }
1019
+
1020
+ ecsact_async_stop_all ( ) ;
1021
+ }
1022
+
1023
+ /**
1024
+ * Wrapper for `ecsact_async_force_reset`
1025
+ */
1026
+ public void ForceReset ( ) {
1027
+ if ( ecsact_async_force_reset == null ) {
1028
+ throw new EcsactRuntimeMissingMethod ( "ecsact_async_force_reset" ) ;
1029
+ }
1030
+
1031
+ ecsact_async_force_reset ( ) ;
1032
+ }
1033
+
963
1034
public Int32 GetCurrentTick ( Int32 sessionId ) {
964
1035
if ( ecsact_async_get_current_tick == null ) {
965
1036
throw new EcsactRuntimeMissingMethod ( "ecsact_async_get_current_tick" ) ;
966
1037
}
967
1038
return ecsact_async_get_current_tick ( sessionId ) ;
968
1039
}
969
1040
970
- public void EnqueueExecutionOptions ( Int32 sessionId , CExecutionOptions executionOptions ) {
1041
+ public void EnqueueExecutionOptions (
1042
+ Int32 sessionId ,
1043
+ CExecutionOptions executionOptions
1044
+ ) {
971
1045
if ( ecsact_async_enqueue_execution_options == null ) {
972
1046
throw new EcsactRuntimeMissingMethod (
973
1047
"ecsact_async_enqueue_execution_options"
@@ -1064,10 +1138,22 @@ Int32 componentId
1064
1138
#endif
1065
1139
}
1066
1140
1067
- internal delegate Int32 ecsact_create_registry_delegate ( string registryName
1141
+ internal delegate Int32 ecsact_create_registry_delegate ( //
1142
+ string registryName
1068
1143
) ;
1069
1144
internal ecsact_create_registry_delegate ? ecsact_create_registry ;
1070
1145
1146
+ internal delegate Int32 ecsact_clone_registry_delegate ( //
1147
+ Int32 registry ,
1148
+ string registryName
1149
+ ) ;
1150
+ internal ecsact_clone_registry_delegate ? ecsact_clone_registry ;
1151
+
1152
+ internal delegate Int64 ecsact_hash_registry_delegate ( //
1153
+ Int32 registry
1154
+ ) ;
1155
+ internal ecsact_hash_registry_delegate ? ecsact_hash_registry ;
1156
+
1071
1157
internal delegate void ecsact_destroy_registry_delegate ( Int32 registryId ) ;
1072
1158
internal ecsact_destroy_registry_delegate ? ecsact_destroy_registry ;
1073
1159
@@ -1196,6 +1282,24 @@ in ExecutionEventsCollector eventsCollector
1196
1282
) ;
1197
1283
internal ecsact_execute_systems_delegate ? ecsact_execute_systems ;
1198
1284
1285
+ internal delegate
1286
+ Ecsact . EntityExecutionStatus ecsact_get_entity_execution_status_delegate (
1287
+ Int32 registry ,
1288
+ Int32 entity ,
1289
+ Int32 systemLikeId
1290
+ ) ;
1291
+ internal
1292
+ ecsact_get_entity_execution_status_delegate ? ecsact_get_entity_execution_status ;
1293
+
1294
+ internal delegate Ecsact . StreamError ecsact_stream_delegate (
1295
+ Int32 registry ,
1296
+ Int32 entity ,
1297
+ Int32 component ,
1298
+ IntPtr componentData ,
1299
+ IntPtr indexedFieldValues
1300
+ ) ;
1301
+ internal ecsact_stream_delegate ? ecsact_stream ;
1302
+
1199
1303
private EcsactRuntime _owner ;
1200
1304
1201
1305
internal Core ( EcsactRuntime owner ) {
@@ -1791,6 +1895,16 @@ internal delegate Int32
1791
1895
internal
1792
1896
ecsact_system_execution_context_entity_delegate ? ecsact_system_execution_context_entity ;
1793
1897
1898
+ internal delegate void
1899
+ ecsact_system_execution_context_stream_toggle_delegate (
1900
+ IntPtr context ,
1901
+ Int32 componentId ,
1902
+ [ MarshalAs ( UnmanagedType . I1 ) ] bool streamingEnabled ,
1903
+ IntPtr indexedFieldValues
1904
+ ) ;
1905
+ internal
1906
+ ecsact_system_execution_context_stream_toggle_delegate ? ecsact_system_execution_context_stream_toggle ;
1907
+
1794
1908
internal delegate void ecsact_set_system_execution_impl_delegate (
1795
1909
Int32 systemId ,
1796
1910
CSystemExecutionImpl executionImpl
@@ -2665,7 +2779,6 @@ public static EcsactRuntime Load(IEnumerable<string> libraryPaths) {
2665
2779
// clang-format on
2666
2780
}
2667
2781
2668
-
2669
2782
if ( runtime . _wasm . ecsact_si_wasm_set_trap_handler != null ) {
2670
2783
runtime . _wasm . ecsact_si_wasm_set_trap_handler ( DefaultWasmTrapHandler ) ;
2671
2784
}
@@ -2685,8 +2798,10 @@ public static void Free(EcsactRuntime runtime) {
2685
2798
}
2686
2799
2687
2800
if ( runtime . _async != null ) {
2688
- if ( runtime . _async . connectState == Ecsact . Async . ConnectState . Connected ) {
2689
- runtime . _async . Stop ( ) ;
2801
+ if ( runtime . _async . ecsact_async_force_reset != null ) {
2802
+ runtime . _async . ecsact_async_force_reset ( ) ;
2803
+ } else if ( runtime . _async . ecsact_async_stop_all != null ) {
2804
+ runtime . _async . ecsact_async_stop_all ( ) ;
2690
2805
}
2691
2806
2692
2807
runtime . _async . ecsact_async_flush_events = null ;
0 commit comments