> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# Последовательность подключения RobustToolbox

Это полная последовательность шагов, которые выполняются при подключении клиента в RobustToolbox (и, в некоторой степени, в Space Station 14). Это невероятно запутанная система, которая развивалась в течение нескольких лет и имеет множество движущихся частей и состояний. Уф.

## Базовый обзор

```mermaid theme={null}
sequenceDiagram
    participant C as Client
    participant S as Server
    
    C->>S: Lidgren Connection Attempt
    S->>C: Lidgren Connection Approval
    
    rect
        Note over C,S: Начальное рукопожатие
        
        C->>S: MsgLoginStart
        Note left of S: Сервер решает, нужна ли аутентификация
        opt Аутентификация
            S->>C: MsgEncryptionRequest
            create participant A as Auth Server
            C->>A: POST /api/session/join
            C->>S: MsgEncryptionResponse
            destroy A
            S->A: GET /api/session/hasJoined
        end
        Note over S: Вызывается событие Connecting,<br/>контент может отклонить подключение при желании
        S->>C: MsgLoginSuccess
        Note over C,S: Обе стороны включают шифрование при необходимости
        Note over C,S: Обе стороны создают NetChannel
    end
    S->>C: MsgStringTableEntries
    rect
        Note over C,S: Рукопожатие сериализатора
        S->>C: MsgMapStrServerHandshake
        C->>S: MsgMapStrClientHandshake
        opt Клиенту нужны строки
            S->>C: MsgMapStrStrings
            C->>S: MsgMapStrClientHandshake
        end
    end
    Note over S,C: Событие NetManager.Connected<br/>Теперь разрешены не-рукопожательные сообщения
    C-->>S: MsgConVars
    C-->>S: MsgConCmdReg
    par PlayerManager.NewSession
        Note over S: Создаётся сессия игрока на стороне сервера,<br/>PlayerStatusChanged выполняется впервые
        S->>C: MsgSyncTimeBase
        Note over S: NetConfigurationManager.SyncConnectingClient
        S->>C: MsgConVars
        Note over C: Создаётся сессия игрока на стороне клиента
        C->>S: MsgPlayerListReq
    and UploadedContentManager
        loop Отправка загруженных ресурсов
            S->>C: NetworkResourceUploadMessage
        end
        loop Отправка загруженных прототипов
            S->>C: GamePrototypeLoadMessage
        end
    end
    Note over S: Сессия игрока устанавливается в Connected
    S->>C: MsgPlayerList<br/>Содержит статус Connected
    Note over C: Сессия игрока устанавливается в Connected
    Note over S: Контент устанавливает статус клиента в InGame
    S->>C: Начинает отправку игровых состояний
    Note over C: Сессия игрока устанавливается в InGame
```
