private bool TryMatchParams(cmdInfo cmdInfo, cmdRequest cmdRequest, out Dictionary <string, string> keyParam) { var keyType = cmdInfo.paramsKeyType; var reqParams = cmdRequest.cmdCommandParams; keyParam = new Dictionary <string, string>(); if (reqParams.Length > keyType.Count) { return(false); } bool allTypesMatched = false; for (int i = 0; i < keyType.Count; i++) { if (allTypesMatched) { break; } Type typeNeeded = keyType.ElementAt(i).Value; for (int j = 0; j < reqParams.Length; j++) { try { var check = Convert.ChangeType(reqParams[j], typeNeeded); keyParam.Add(keyType.ElementAt(i).Key, reqParams[j]); if (keyParam.Count == reqParams.Length) { allTypesMatched = true; break; } } catch { continue; } } } if (reqParams.Length > keyParam.Count) { return(false); } else { return(true); } }
public cmdResponse ReadCommand(string request) { string errorMes = ""; cmdRequest cmdRequest = new cmdRequest(request); try { if (!cmdToAction.ContainsKey(cmdRequest.cmdCommand)) { errorMes = "unknown command"; throw new Exception(errorMes); } var cmdInfo = cmdToAction[cmdRequest.cmdCommand]; if (cmdInfo.requireParams && !cmdRequest.cmdCommandParams.Any()) { errorMes = "command needs parameters"; throw new Exception(errorMes); } if (cmdInfo.noParams && cmdRequest.cmdCommandParams.Any()) { errorMes = "command does not support params"; throw new Exception(errorMes); } if (cmdRequest.cmdCommandParams.Length < 1) { return(new cmdResponse(cmdInfo)); } bool paramsMatched = TryMatchParams(cmdInfo, cmdRequest, out Dictionary <string, string> keyParam); if (!paramsMatched) { errorMes = "command parameters matching error"; throw new Exception(errorMes); } return(new cmdResponse(cmdInfo, keyParam)); } catch (Exception ex) { return(cmdResponse.getCustomResponse("Terminal/error", new Dictionary <string, string> { { "mes", ex.Message } })); } }