npm package: @laravelka/capacitor-nsd
Description: Capacitor plugin for Network Service Discovery
Latest version: 0.0.2

# @satoru/capacitor-nsd

Capacitor плагин для работы с Network Service Discovery (NSD) в локальной сети. Позволяет обнаруживать устройства и обмениваться данными между ними без необходимости в интернет-соединении.

## Установка

```bash
npm install @satoru/capacitor-nsd
npx cap sync
```

## Разработка

### Требования

- Node.js 14+
- npm 6+
- Android Studio и Android SDK для Android разработки
- Xcode 12+ для iOS разработки (только macOS)

### Сборка

```bash
npm install
npm run build
```

### Проверка

```bash
# На Windows
npm run verify

# На macOS (включая iOS)
npm run verify:ios
```

## Конфигурация

### Android

Добавьте следующие разрешения в `android/app/src/main/AndroidManifest.xml`:

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
```

### iOS

Специальная конфигурация не требуется. Плагин использует Network.framework, который доступен по умолчанию.

## API

### Методы

#### registerService(options: { serviceName: string, serviceType: string, port: number })
Регистрирует сервис в локальной сети.

```typescript
await CapacitorNsd.registerService({
  serviceName: "MyService",
  serviceType: "_http._tcp.",
  port: 8080
});
```

#### unregisterService()
Отменяет регистрацию сервиса.

```typescript
await CapacitorNsd.unregisterService();
```

#### startDiscovery(options: { serviceType: string })
Начинает поиск сервисов указанного типа в локальной сети.

```typescript
await CapacitorNsd.startDiscovery({
  serviceType: "_http._tcp."
});
```

#### stopDiscovery()
Останавливает поиск сервисов.

```typescript
await CapacitorNsd.stopDiscovery();
```

#### getDiscoveredServices()
Возвращает список найденных сервисов.

```typescript
const { services } = await CapacitorNsd.getDiscoveredServices();
```

#### resolveService(options: { serviceName: string, serviceType: string })
Подключается к выбранному сервису.

```typescript
const serviceInfo = await CapacitorNsd.resolveService({
  serviceName: "MyService",
  serviceType: "_http._tcp."
});
```

#### startWebSocketServer(options: { port: number })
Запускает WebSocket сервер для обмена данными.

```typescript
await CapacitorNsd.startWebSocketServer({
  port: 8080
});
```

#### stopWebSocketServer()
Останавливает WebSocket сервер.

```typescript
await CapacitorNsd.stopWebSocketServer();
```

#### sendData(options: { data: string })
Отправляет данные подключенному устройству.

```typescript
await CapacitorNsd.sendData({
  data: JSON.stringify({ message: "Hello!" })
});
```

### События

#### dataReceived
Событие, возникающее при получении данных.

```typescript
CapacitorNsd.addListener('dataReceived', (data: { data: string }) => {
  console.log('Получены данные:', data.data);
});
```

## Пример использования

### Устройство A (Сервер)

```typescript
// Регистрация сервиса
await CapacitorNsd.registerService({
  serviceName: "MyService",
  serviceType: "_http._tcp.",
  port: 8080
});

// Запуск WebSocket сервера
await CapacitorNsd.startWebSocketServer({
  port: 8080
});

// Прослушивание входящих сообщений
CapacitorNsd.addListener('dataReceived', (data) => {
  console.log('Получены данные:', data.data);
});
```

### Устройство B (Клиент)

```typescript
// Поиск сервисов
await CapacitorNsd.startDiscovery({
  serviceType: "_http._tcp."
});

// Получение списка сервисов
const { services } = await CapacitorNsd.getDiscoveredServices();

// Подключение к сервису
await CapacitorNsd.resolveService({
  serviceName: services[0].serviceName,
  serviceType: services[0].serviceType
});

// Отправка данных
await CapacitorNsd.sendData({
  data: JSON.stringify({ message: "Hello from client!" })
});
```

## Поддерживаемые платформы

- Android
- iOS

## Лицензия

MIT