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;
}