feat: GeViScope SDK integration with C# Bridge and Flutter app
- Add GeViScope Bridge (C# .NET 8.0) on port 7720 - Full SDK wrapper for camera control, PTZ, actions/events - 17 REST API endpoints for GeViScope server interaction - Support for MCS (Media Channel Simulator) with 16 test channels - Real-time action/event streaming via PLC callbacks - Add GeViServer Bridge (C# .NET 8.0) on port 7710 - Integration with GeViSoft orchestration layer - Input/output control and event management - Update Python API with new routers - /api/geviscope/* - Proxy to GeViScope Bridge - /api/geviserver/* - Proxy to GeViServer Bridge - /api/excel/* - Excel import functionality - Add Flutter app GeViScope integration - GeViScopeRemoteDataSource with 17 API methods - GeViScopeBloc for state management - GeViScopeScreen with PTZ controls - App drawer navigation to GeViScope - Add SDK documentation (extracted from PDFs) - GeViScope SDK docs (7 parts + action reference) - GeViSoft SDK docs (12 chunks) - Add .mcp.json for Claude Code MCP server config Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
abstract class GeViScopeEvent extends Equatable {
|
||||
const GeViScopeEvent();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
/// Connect to GeViScope Camera Server
|
||||
class ConnectGeViScopeEvent extends GeViScopeEvent {
|
||||
final String address;
|
||||
final String username;
|
||||
final String password;
|
||||
|
||||
const ConnectGeViScopeEvent({
|
||||
required this.address,
|
||||
required this.username,
|
||||
required this.password,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [address, username, password];
|
||||
}
|
||||
|
||||
/// Disconnect from GeViScope
|
||||
class DisconnectGeViScopeEvent extends GeViScopeEvent {
|
||||
const DisconnectGeViScopeEvent();
|
||||
}
|
||||
|
||||
/// Check connection status
|
||||
class CheckGeViScopeStatusEvent extends GeViScopeEvent {
|
||||
const CheckGeViScopeStatusEvent();
|
||||
}
|
||||
|
||||
/// Load media channels
|
||||
class LoadChannelsEvent extends GeViScopeEvent {
|
||||
const LoadChannelsEvent();
|
||||
}
|
||||
|
||||
/// Refresh media channels
|
||||
class RefreshChannelsEvent extends GeViScopeEvent {
|
||||
const RefreshChannelsEvent();
|
||||
}
|
||||
|
||||
/// Send CrossSwitch command
|
||||
class SendGeViScopeCrossSwitchEvent extends GeViScopeEvent {
|
||||
final int videoInput;
|
||||
final int videoOutput;
|
||||
final int switchMode;
|
||||
|
||||
const SendGeViScopeCrossSwitchEvent({
|
||||
required this.videoInput,
|
||||
required this.videoOutput,
|
||||
this.switchMode = 0,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [videoInput, videoOutput, switchMode];
|
||||
}
|
||||
|
||||
/// PTZ Camera Pan
|
||||
class CameraPanEvent extends GeViScopeEvent {
|
||||
final int camera;
|
||||
final String direction;
|
||||
final int speed;
|
||||
|
||||
const CameraPanEvent({
|
||||
required this.camera,
|
||||
required this.direction,
|
||||
this.speed = 50,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [camera, direction, speed];
|
||||
}
|
||||
|
||||
/// PTZ Camera Tilt
|
||||
class CameraTiltEvent extends GeViScopeEvent {
|
||||
final int camera;
|
||||
final String direction;
|
||||
final int speed;
|
||||
|
||||
const CameraTiltEvent({
|
||||
required this.camera,
|
||||
required this.direction,
|
||||
this.speed = 50,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [camera, direction, speed];
|
||||
}
|
||||
|
||||
/// PTZ Camera Zoom
|
||||
class CameraZoomEvent extends GeViScopeEvent {
|
||||
final int camera;
|
||||
final String direction;
|
||||
final int speed;
|
||||
|
||||
const CameraZoomEvent({
|
||||
required this.camera,
|
||||
required this.direction,
|
||||
this.speed = 50,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [camera, direction, speed];
|
||||
}
|
||||
|
||||
/// PTZ Camera Stop
|
||||
class CameraStopEvent extends GeViScopeEvent {
|
||||
final int camera;
|
||||
|
||||
const CameraStopEvent({required this.camera});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [camera];
|
||||
}
|
||||
|
||||
/// PTZ Camera Preset
|
||||
class CameraPresetEvent extends GeViScopeEvent {
|
||||
final int camera;
|
||||
final int preset;
|
||||
|
||||
const CameraPresetEvent({
|
||||
required this.camera,
|
||||
required this.preset,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [camera, preset];
|
||||
}
|
||||
|
||||
/// Close digital contact
|
||||
class GeViScopeCloseContactEvent extends GeViScopeEvent {
|
||||
final int contactId;
|
||||
|
||||
const GeViScopeCloseContactEvent({required this.contactId});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [contactId];
|
||||
}
|
||||
|
||||
/// Open digital contact
|
||||
class GeViScopeOpenContactEvent extends GeViScopeEvent {
|
||||
final int contactId;
|
||||
|
||||
const GeViScopeOpenContactEvent({required this.contactId});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [contactId];
|
||||
}
|
||||
|
||||
/// Send custom action
|
||||
class SendGeViScopeCustomActionEvent extends GeViScopeEvent {
|
||||
final int typeId;
|
||||
final String text;
|
||||
|
||||
const SendGeViScopeCustomActionEvent({
|
||||
required this.typeId,
|
||||
this.text = '',
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [typeId, text];
|
||||
}
|
||||
|
||||
/// Send raw action
|
||||
class SendGeViScopeActionEvent extends GeViScopeEvent {
|
||||
final String action;
|
||||
|
||||
const SendGeViScopeActionEvent({required this.action});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [action];
|
||||
}
|
||||
|
||||
/// Clear last action result
|
||||
class ClearGeViScopeActionResultEvent extends GeViScopeEvent {
|
||||
const ClearGeViScopeActionResultEvent();
|
||||
}
|
||||
Reference in New Issue
Block a user