Exemple #1
0
        public async Task DispatchMessagesAsync()
        {
            while (true)
            {
                var receiveResult = await _udpClient.ReceiveAsync();

                var acsReader = new ACSProtocolReader(receiveResult.Buffer);
                var packetId  = acsReader.ReadByte();

                switch (packetId)
                {
                case ACSProtocol.ACSP_ERROR:
                {
                    var message = acsReader.ReadStringW();
                    OnError?.Invoke(packetId, message);
                }
                break;

                case ACSProtocol.ACSP_CHAT:
                {
                    var eventData = new ChatEvent(acsReader);
                    OnChat?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_CLIENT_LOADED:
                {
                    var carId = acsReader.ReadByte();
                    OnClientLoaded?.Invoke(packetId, carId);
                }
                break;

                case ACSProtocol.ACSP_VERSION:
                {
                    var protocolVersion = acsReader.ReadByte();
                    OnVersion?.Invoke(packetId, protocolVersion);
                }
                break;

                case ACSProtocol.ACSP_NEW_SESSION:
                {
                    var eventData = new SessionInfoEvent(acsReader);
                    OnNewSession?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_SESSION_INFO:
                {
                    var eventData = new SessionInfoEvent(acsReader);
                    OnSessionInfo?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_END_SESSION:
                {
                    var reportFile = acsReader.ReadStringW();
                    OnEndSession?.Invoke(packetId, reportFile);
                }
                break;

                case ACSProtocol.ACSP_CLIENT_EVENT:
                {
                    var eventData = new ClientEventEvent(acsReader);
                    OnClientEvent?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_CAR_INFO:
                {
                    var eventData = new CarInfoEvent(acsReader);
                    OnCarInfo?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_CAR_UPDATE:
                {
                    var eventData = new CarUpdateEvent(acsReader);
                    OnCarUpdate?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_NEW_CONNECTION:
                {
                    var eventData = new ConnectionEvent(acsReader);
                    OnNewConnection?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_CONNECTION_CLOSED:
                {
                    var eventData = new ConnectionEvent(acsReader);
                    OnConnectionClosed?.Invoke(packetId, eventData);
                }
                break;

                case ACSProtocol.ACSP_LAP_COMPLETED:
                {
                    var eventData = new LapCompletedEvent(acsReader);
                    OnLapCompleted?.Invoke(packetId, eventData);
                }
                break;
                }
            }
        }