/// <summary>
        /// Recieves messages and handles them until the first event is recieved. The event is decoded and returned.
        /// </summary>
        public virtual async Task <ControllerEvent> ReceiveAsync(WebSocket socket)
        {
            byte[] message = await ReceiveRawDataAsync(socket);

            HandleChangeState(message);

            // Handles messages until controllers message mode starts.
            while (_state != MessageManagerState.Controllers && message != null)
            {
                if (!HandleChangeState(message))
                {
                    switch (_state)
                    {
                    case MessageManagerState.Configuration:
                        HandleConfiguration(message);
                        break;

                    case MessageManagerState.Initial:
                        HandleInitialMessage(message);
                        break;

                    default:
                        throw new Exception();
                    }
                }

                message = await ReceiveRawDataAsync(socket);
            }

            if (message == null)
            {
                OnCloseMessage?.Invoke();
                return(null);
            }

            return(HandleControllerEvent(message));
        }
示例#2
0
 public static void CloseMessage()
 {
     OnCloseMessage?.Invoke();
 }