react-native-freedome
v0.1.0
Published
Унифицированная React Native библиотека для интеграции с купольными кинотеатрами FreeDome
Maintainers
Readme
React Native FreeDome
Унифицированная React Native библиотека для интеграции с купольными кинотеатрами FreeDome. Поддерживает гостевой режим для воспроизведения контента и административный режим для полной настройки и калибровки купольных систем.
🌟 Основные возможности
🎭 Гостевой режим
- Автоматическое обнаружение купольных систем в локальной сети
- Воспроизведение контента любых приложений на купольном экране
- Базовые настройки (громкость, яркость, ротация)
- Простой API для быстрой интеграции
- Готовые React компоненты для управления
🔧 Режим администратора
- Полная калибровка аудио и видео систем
- Управление проекторами и аудиоканалами
- Системное администрирование и мониторинг
- Поддержка множественных вендоров (Digistar, DomeMaster, IMAX Dome)
- Диагностика и метрики системы
🏗️ Архитектура
- Модульная структура с разделением на гостевой и административный режимы
- Система ролей и разрешений для безопасного доступа
- Поддержка множественных форматов контента (360°, Fulldome, Fisheye)
- Реактивное программирование с React Context и хуками
🚀 Установка
npm install react-native-freedome
# или
yarn add react-native-freedomeДополнительные зависимости
npm install @react-native-async-storage/async-storage @react-native-community/netinfo react-native-encrypted-storage socket.io-client react-native-device-infoiOS
cd ios && pod install🎯 Быстрый старт
1. Оберните приложение в FreeDomeProvider
import React from 'react';
import { FreeDomeProvider } from 'react-native-freedome';
import { MyApp } from './MyApp';
export default function App() {
return (
<FreeDomeProvider
config={{
autoDiscovery: true,
defaultRole: 'guest',
}}
>
<MyApp />
</FreeDomeProvider>
);
}2. Используйте хук useFreeDome в компонентах
import React, { useEffect } from 'react';
import { View, Button, Text } from 'react-native';
import { useFreeDome } from 'react-native-freedome';
export function MyApp() {
const {
state,
initialize,
connectToNearestDome,
playAppContent
} = useFreeDome();
useEffect(() => {
// Инициализация FreeDome
initialize();
}, []);
const handleConnect = async () => {
await connectToNearestDome();
};
const handlePlayContent = async () => {
await playAppContent(
'MyApp',
'Звездное небо',
{
type: 'starfield',
constellation: 'all',
time: new Date().toISOString(),
}
);
};
return (
<View style={{ flex: 1, padding: 20 }}>
<Text>Статус: {state.connectionStatus.isConnected ? 'Подключен' : 'Отключен'}</Text>
<Text>Найдено систем: {state.discoveredSystems.length}</Text>
<Button title="Подключиться" onPress={handleConnect} />
<Button title="Показать контент" onPress={handlePlayContent} />
</View>
);
}3. Быстрое воспроизведение (одной командой)
import { ReactNativeFreeDome } from 'react-native-freedome';
// Внутри компонента с FreeDomeProvider
const { playAppContent, connectToNearestDome, state } = useFreeDome();
const quickPlay = async () => {
if (!state.connectionStatus.isConnected) {
await connectToNearestDome();
}
const success = await playAppContent(
'MyApp',
'Мой контент',
{ type: 'visualization', data: myData }
);
if (success) {
console.log('Контент воспроизводится на куполе!');
}
};🎮 Примеры интеграции
Звездное небо
const playStarrySkr = async () => {
await playAppContent(
'StarrySkr',
'Звездное небо',
{
type: 'starfield',
constellation: 'all',
time: new Date().toISOString(),
}
);
};Солнечная система
const playSolarSystem = async () => {
await playAppContent(
'SolarSystem',
'Планеты',
{
type: 'solar_system',
showOrbits: true,
speed: 1.0,
}
);
};Медитация
const playMeditation = async () => {
await playAppContent(
'MeditationApp',
'Релаксация',
{
type: 'meditation',
duration: 300,
background: 'nature',
}
);
};🔧 Режим администратора
import { useFreeDome } from 'react-native-freedome';
function AdminPanel() {
const { authenticateAsAdmin, hasRole, state } = useFreeDome();
const handleAdminLogin = async () => {
const success = await authenticateAsAdmin('admin', 'password');
if (success && hasRole('admin')) {
// Доступ к административным функциям
console.log('Администратор вошел в систему');
}
};
return (
<View>
<Button title="Войти как администратор" onPress={handleAdminLogin} />
{state.currentUser?.role === 'admin' && (
<Text>Режим администратора активен</Text>
)}
</View>
);
}📱 API Документация
useFreeDome Hook
Основной хук для работы с FreeDome:
const {
// Состояние
state,
// Инициализация
initialize,
reset,
// Подключение
connectToNearestDome,
connectToDome,
disconnect,
// Аутентификация
authenticateAsAdmin,
switchToGuestMode,
logout,
// Контент
playContent,
playAppContent,
pausePlayback,
resumePlayback,
stopPlayback,
setVolume,
setBrightness,
// Разрешения
hasPermission,
hasRole,
// События
addEventListener,
removeEventListener,
// Утилиты
getSystemStatus,
} = useFreeDome();Состояние FreeDome
interface FreeDomeState {
isInitialized: boolean;
isInitializing: boolean;
error: string | null;
connectionStatus: FreeDomeConnectionStatus;
currentUser: FreeDomeUser | null;
currentSession: FreeDomeSession | null;
activeDome: DomeSystem | null;
discoveredSystems: DomeSystem[];
playbackState: PlaybackState;
}Конфигурация
interface FreeDomeConfig {
autoDiscovery?: boolean;
defaultRole?: FreeDomeUserRole;
maxReconnectAttempts?: number;
reconnectDelay?: number;
heartbeatInterval?: number;
discoveryInterval?: number;
}🎯 Поддерживаемые форматы контента
- 360° видео (Equirectangular)
- Fulldome контент
- Fisheye проекция
- Кубические карты (Cubemap)
- Интерактивный контент
- Контент в реальном времени
🌐 Поддерживаемые платформы
- ✅ Android (API 21+)
- ✅ iOS (iOS 11.0+)
- ✅ React Native (0.60+)
📋 Системные требования
Минимальные требования
- React Native 0.60.0+
- Node.js 14.0+
- FreeDome Core 2.0+
Рекомендуемые требования
- React Native 0.70.0+
- Node.js 18.0+
- FreeDome Core 2.5+
🔒 Безопасность
- Система ролей: Guest, Operator, Admin, Superadmin
- Разрешения: Детальный контроль доступа к функциям
- Безопасное хранение: Токены в React Native Encrypted Storage
- Аутентификация: JWT токены и хэширование паролей
🛠️ Разработка
Сборка из исходников
git clone https://github.com/nativemind/react-native-freedome.git
cd react-native-freedome
yarn install
yarn buildЗапуск примера
cd example
yarn install
yarn android
# или
yarn iosТестирование
yarn test🎨 Компоненты (в разработке)
import {
FreeDomeConnectionWidget,
FreeDomeContentPlayer,
FreeDomeStatusIndicator,
} from 'react-native-freedome';
function MyFreeDomeApp() {
return (
<View>
<FreeDomeStatusIndicator />
<FreeDomeConnectionWidget />
<FreeDomeContentPlayer />
</View>
);
}🤝 Участие в разработке
Мы приветствуем вклад в развитие проекта! Пожалуйста:
- Форкните репозиторий
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Зафиксируйте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
📄 Лицензия
Этот проект лицензирован под MIT License - см. файл LICENSE для деталей.
🆘 Поддержка
- 📧 Email: [email protected]
- 💬 Telegram: @nativemind_support
- 🐛 Issues: GitHub Issues
- 📚 Docs: Documentation
📈 Статистика
- ⭐ GitHub Stars: Поставьте звезду, если проект полезен!
- 📦 NPM Downloads: Следите за популярностью на npmjs.com
- 🏆 Использование: Используется в купольных планетариях по всему миру
🔄 Миграция с Flutter
Эта библиотека является зеркальной копией Flutter FreeDome библиотеки. Основные концепции и API остаются теми же:
FreeDomeProvider↔FreeDomeProvider(Flutter)useFreeDome()↔context.read<FreeDomeProvider>()(Flutter)- Те же типы данных и модели
- Аналогичная архитектура сервисов
Сделано с ❤️ командой NativeMind
