# C# 샘플


설치한 SDK로 실제 CSV 파일 생성을 보호하는 샘플이에요. 브라우저와 파일 전달이 동일한 고객 승인과 등록을 사용해요.

[이 언어 샘플 다운로드](/downloads/samples/signox-csharp-sample.zip)

## 설치하고 설정하기

소스 압축파일을 푼 디렉터리 안에서 실행하세요. 언어별 가이드에 따라 개발 SDK를 설치해요. 네 SDK 모두 패키지 의존성으로 설치해요.

[SDK](/sdk/csharp/)

```bash
dotnet restore
```

env.example을 참고해 SIGNOX_API_URL·SIGNOX_PRODUCT_ID·SIGNOX_PUBLIC_KEY_FILE·SIGNOX_STATE_DIR를 설정하세요. 제품 UUID와 공개키는 벤더의 제품 설정에서 받아요. 고객은 포털에서만 라이센스 키를 등록해요. 개인 상태와 계정 자격증명은 커밋하지 마세요.

## 샘플 실행하기

env.example의 네 변수를 실행할 셸에 설정하고 SIGNOX_PUBLIC_KEY_FILE 위치에 제품 공개키를 저장하세요. start가 출력한 고객 포털에서 승인한 뒤 poll과 export를 실행하세요.

```bash
dotnet run -- activation-start
dotnet run -- activation-poll
dotnet run -- activation-export output.csv
```

연결되지 않은 기기에서는 아래 두 파일을 PC 사이에 옮기세요:

```bash
dotnet run -- activation-request request.signox
# Import request.signox in the customer portal and save activation.signox.
dotnet run -- activation-apply activation.signox
```

| Command | 기대 동작 |
|---|---|
| `activation-start` | 앱 브랜드가 유지되는 고객 포털 주소를 출력해요. 브라우저로 여세요. |
| `activation-poll` | 승인 전에는 pending, 승인 후에는 응답 적용과 권한 검증 결과를 출력해요. |
| `activation-request` | 다른 PC로 전달할 공개 요청 JSON을 출력해요. |
| `activation-renew-request` | 로컬 설치 식별을 유지한 채 만료된 요청을 새 요청으로 교체해요. |
| `activation-apply activation.signox` | 고객 포털에서 받은 응답의 서명과 기기를 검증하고 적용해요. |
| `activation-status` | 현재 권한을 확인해요. valid와 demo_export가 모두 참이어야 내보내기를 허용해요. |
| `activation-export output.csv` | 허용되면 센서 예제 2행을 실제 파일로 써요. 기능이 없으면 종료 코드 3이에요. |
| `activation-deactivate` | 연결 기반 등록을 해제해요. 보호된 이용권은 이전 검토가 필요해요. |

종료 코드 0은 명령 실행 성공이며 승인 대기 pending도 포함해요. 반드시 활성화 완료라는 뜻은 아니에요. 종료 코드 2는 검증·활성화 실패예요. 대기·미실행을 검증 통과로 기록하지 마세요.

요청 생성 → 고객 로그인 → 구매 키 등록 → 라이센스 선택 → 승인 → poll/apply 순서로 실행하세요. 별도 상태 디렉터리에서 요청을 만들면 다른 기기 이전 검토로 안내돼야 해요. 명령·종료 코드·예상/실제 결과·증거 경로를 남기세요.

기존 방식의 온라인·오프라인 전용 명령은 호환성 검증용으로 남아 있어요. 신규 연동은 위 activation 명령으로 시작하세요.
