Chimney.MPD.ChimneyMPDServer.ParseResponse C# (CSharp) Method

ParseResponse() private method

private ParseResponse ( StreamSocket streamSocket, string response, int responseId ) : bool
streamSocket Windows.Networking.Sockets.StreamSocket
response string
responseId int
return bool
        bool ParseResponse(StreamSocket streamSocket, string response, int responseId)
        {
            //response = response.ToLower();

            string[] commands = response.Split("\n".ToArray(), StringSplitOptions.RemoveEmptyEntries);

            int position = -1;

            bool noidle = false;

            if (!password_confirmed)
            {
                if(commands.Count<string>() > 0 )
                {
                    Tuple<string, List<string>> commandArgs = SplitCommandArgs(commands[0]);

                    if(commandArgs.Item1.Equals("password") && commandArgs.Item2.Count > 0)
                    {
                        password_confirmed = (commandArgs.Item2.FirstOrDefault<string>().Equals(password));
                    }
                }

                if (!password_confirmed) return true;
            }

            foreach (string s in commands)
            {
                string lowers = s.ToLower();
                switch(lowers)
                {
                    case(MPDKeyWords.Client.CommandList.COMMAND_LIST_BEGIN):
                        break;
                    case (MPDKeyWords.Client.CommandList.COMMAND_LIST_END):
                        break;
                    case (MPDKeyWords.Client.CommandList.COMMAND_LIST_OK_BEGIN):
                        break;
                    default:
                        ResponsConfigDictionary[responseId].ResponseFinishLenght++;
                        break;
                } 
            }

            foreach (string command in commands)
            {
                Tuple<string, List<string>> commandArgs = SplitCommandArgs(command);

                bool client_list_command = false;
                
                switch (commandArgs.Item1)
                {
                    case (MPDKeyWords.Client.CommandList.COMMAND_LIST_BEGIN):
                        ResponsConfigDictionary[responseId].command_list_begin = true;
                        ResponsConfigDictionary[responseId].command_list_end = false;
                        if (OnCommandListBegin != null) OnCommandListBegin(this, new CommandListResponseEventArgs(streamSocket, responseId, true, false, false));
                        client_list_command = true;
                        break;
                    case (MPDKeyWords.Client.CommandList.COMMAND_LIST_END):
                        ResponsConfigDictionary[responseId].command_list_end = true;
                        if (OnCommandListEnd != null) OnCommandListEnd(this, new CommandListResponseEventArgs(streamSocket, responseId, false, true, false));
                        client_list_command = true;
                        break;
                    case (MPDKeyWords.Client.CommandList.COMMAND_LIST_OK_BEGIN):
                        ResponsConfigDictionary[responseId].command_list_ok_begin = true;
                        ResponsConfigDictionary[responseId].command_list_end = false;
                        if (OnCommandListBeginOk != null) OnCommandListBeginOk(this, new CommandListResponseEventArgs(streamSocket, responseId, true, false, true));
                        client_list_command = true;
                        break;
                    default:
                        break;
                }
                if (!client_list_command)
                {
                    position++;

                    switch (commandArgs.Item1)
                    {
                        case (MPDKeyWords.Client.Status.STATUS):
                            if (OnStatus != null) OnStatus(this, new ResponseEventArgs(streamSocket, responseId, position));
                            break;
                        case (MPDKeyWords.Client.Status.CURRENTSONG):
                            if (OnCurrentSong != null) OnCurrentSong(this, new ResponseEventArgs(streamSocket, responseId, position));
                            break;
                        case (MPDKeyWords.Client.Status.STATS):
                            if (OnStats != null) OnStats(this, new ResponseEventArgs(streamSocket, responseId, position));
                            break;
                        case (MPDKeyWords.Client.Playback.SETVOL):
                            if (OnSetVol != null) OnSetVol(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.VOLUME):
                            if (OnSetVol != null) OnSetVol(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.PLAY):
                            if (OnPlay != null) OnPlay(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.STOP):
                            if (OnStop != null) OnStop(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.PAUSE):
                            if (OnPause != null) OnPause(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.NEXT):
                            if (OnNext != null) OnNext(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.PREVIOUS):
                            if (OnPrevious != null) OnPrevious(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.CLEAR):
                            if (OnClear != null) OnClear(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.LSINFO):
                            if (OnLsInfo != null) OnLsInfo(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.LIST):
                            if (OnList != null) OnList(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.LISTALL):
                            if (OnListAll != null) OnListAll(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.LISTALLINFO):
                            if (OnListAllInfo != null) OnListAllInfo(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.ADD):
                            if (OnAdd != null) OnAdd(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.ADDID):
                            if (OnAddId != null) OnAddId(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.CONSUME):
                            if (OnConsume != null) OnConsume(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.SINGLE):
                            if (OnSingle != null) OnSingle(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.REPEAT):
                            if (OnRepeat != null) OnRepeat(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.RANDOM):
                            if (OnRandom != null) OnRandom(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.SHUFFLE):
                            if (OnShuffle != null) OnShuffle(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.PLAYLISTINFO):
                            if (OnPlaylistInfo != null) OnPlaylistInfo(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.PLCHANGES):
                            if (OnPlChanges != null) OnPlChanges(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.MOVEID):
                            if (OnMoveId != null) OnMoveId(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.DELETE):
                            if (OnDelete != null) OnDelete(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playlist.DELETEID):
                            if (OnDeleteId != null) OnDeleteId(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.PLAYID):
                            if (OnPlayId != null) OnPlayId(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.SEARCH):
                            if (OnSearch != null) OnSearch(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.FIND):
                            if (OnFind != null) OnFind(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.LISTPLAYLIST):
                            if (OnListPlaylist != null) OnListPlaylist(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.LISTPLAYLISTINFO):
                            if (OnListPlaylistInfo != null) OnListPlaylistInfo(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.LISTPLAYLISTS):
                            if (OnListPlaylists != null) OnListPlaylists(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.LOAD):
                            if (OnLoad != null) OnLoad(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.PLAYLISTADD):
                            if (OnPlaylistAdd != null) OnPlaylistAdd(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.PLAYLISTCLEAR):
                            if (OnPlaylistClear != null) OnPlaylistClear(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.PLAYLISTDELETE):
                            if (OnPlaylistDelete != null) OnPlaylistDelete(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.PLAYLISTMOVE):
                            if (OnPlaylistMove != null) OnPlaylistMove(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.RENAME):
                            if (OnRename != null) OnRename(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.RM):
                            if (OnRm != null) OnRm(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.StoredPlaylist.SAVE):
                            if (OnSave != null) OnSave(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Outputs.OUTPUTS):
                            if (OnOutputs != null) OnOutputs(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Outputs.TOGGLEOUTPUT):
                            if (OnToggleOutput != null) OnToggleOutput(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Outputs.ENABLEOUTPUT):
                            if (OnEnableOutput != null) OnEnableOutput(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Outputs.DISABLEOUTPUT):
                            if (OnDisableOutput != null) OnDisableOutput(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Database.UPDATE):
                            if (OnUpdate != null) OnUpdate(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Playback.SEEKCUR):
                            if (OnSeekCur != null) OnSeekCur(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Status.IDLE):
                            ResponsConfigDictionary[responseId].idle = true;
                            if (OnIdle != null) OnIdle(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        case (MPDKeyWords.Client.Status.NOIDLE):
                            noidle = true;
                            ResponsConfigDictionary[responseId].ClearConfig();
                            ResponsConfigDictionary[responseId].idle = false;
                            if (OnNoIdle != null) OnNoIdle(this, new ResponseEventArgs(streamSocket, responseId, position, commandArgs.Item2));
                            break;
                        default:
                            if (OnDefault != null) OnDefault(this, new ResponseEventArgs(streamSocket, responseId, position));
                            break;
                    }
                }
            }
            return noidle;
        }