@@ -23,6 +23,7 @@ public class QianCarController
2323 public Func < CarType , ICar > CreateCarFunc { get ; set ; } = CarFactory . CreateInstance ;
2424 public Func < RegisterRequestData , bool > CheckRegisteration { get ; set ; }
2525
26+
2627 public event OnCarEventHandler BeforeRegistering ;
2728 public event OnCarEventHandler AfterRegistered ;
2829 public event OnCarEventHandler BeforeReportState ;
@@ -35,6 +36,7 @@ public class QianCarController
3536 public event OnCarEventHandler OnCarLeaveConfirm ;
3637 public event OnCarEventHandler OnUnregisterRequest ;
3738 public event OnCarEventHandler OnUnregisterResponse ;
39+ public event OnCarEventHandler OnErrorReport ;
3840 public event OnCustomDataEventHandler OnCustomData ;
3941
4042 protected void _init ( ushort serverid )
@@ -54,6 +56,15 @@ public QianCarController(ushort serverid,ushort regport,ushort dataport)
5456 _init ( serverid ) ;
5557 Server . InitRegServer ( IPAddress . Any , regport ) ;
5658 Server . InitDataServer ( IPAddress . Any , dataport ) ;
59+
60+ }
61+
62+ public QianCarController ( ushort serverid , IPAddress serverip , ushort regport , ushort dataport )
63+ {
64+ _init ( serverid ) ;
65+ Server . InitRegServer ( serverip , regport ) ;
66+ Server . InitDataServer ( serverip , dataport ) ;
67+
5768 }
5869
5970 public void StartServer ( )
@@ -83,6 +94,11 @@ public virtual void ConfirmRegisteration(QianCar car,bool conf,ushort id)
8394 RegisterResponseData res = ( RegisterResponseData ) QianComDataFactory . CreateInstance ( DataFunctionType . RegisterResponse ) ;
8495 res . AllowRegister = conf ;
8596 res . AllocatedID = id ;
97+ if ( Server . DataServer . ListenIP != IPAddress . Any )
98+ res . ServerIP = Server . DataServer . ListenIP ;
99+ else
100+ res . ServerIP = Util . GetLocalIpInSameSubnet ( ( ( CarUDPClient ) car . ComClient ) . Client . Address ) ;
101+ res . ServerPort = Server . DataServer . ListenPort ;
86102 SendCarDataPack ( car , res ) ;
87103 }
88104
@@ -137,6 +153,14 @@ public virtual void ConfirmUnregteration(QianCar car,bool allow,bool removecar=t
137153 SendCarDataPack ( car , res ) ;
138154 }
139155
156+ public virtual void EmergencyStopCar ( QianCar car , byte code )
157+ {
158+ var data = ( EmergencyStopData ) QianComDataFactory . CreateInstance ( DataFunctionType . EmergencyStop ) ;
159+ data . EmergencyCode = code ;
160+ car . State = CarState . EmergencyStop ;
161+ SendCarDataPack ( car , data ) ;
162+ }
163+
140164 protected virtual void Server_OnCarDataReceived ( IComClient client , QianComHeader header , QianComData data )
141165 {
142166 if ( header . FuncType == DataFunctionType . RegisterRequest )
@@ -181,12 +205,23 @@ protected virtual void Server_OnCarDataReceived(IComClient client, QianComHeader
181205 OnUnregisterResponse ? . Invoke ( car , data ) ;
182206 UnregisterResponseHandler ( car , ( UnregisterResponseData ) data ) ;
183207 break ;
208+ case DataFunctionType . ErrorReport :
209+ ErrorReportHandler ( car , ( ErrorReportData ) data ) ;
210+ OnErrorReport ? . Invoke ( car , data ) ;
211+ break ;
184212 default :
185213 OnCustomData ? . Invoke ( car , header , data ) ;
186214 break ;
187215 }
188216 }
189217
218+ public virtual void ErrorReportHandler ( QianCar car , ErrorReportData data )
219+ {
220+ car . State = CarState . Error ;
221+ car . ErrorState = data . ErrorCode ;
222+ car . ErrorInfo = data . ErrorData ;
223+ }
224+
190225 public virtual void UnregisterResponseHandler ( QianCar car , UnregisterResponseData data )
191226 {
192227 if ( data . AllowUnregiser )
0 commit comments