//private void _WebsocketClient_MessageReceived(object sender, Net.WebSocketClientMessageEventArgs e) { // string data = e.Message; // if (!string.IsNullOrWhiteSpace(data) && data.StartsWith("{")) { // CommandReceived?.Invoke(this, new JsonCommandEventArgs(new JsonCommand(data))); // } //} //public void Start() { // if (WebSocketClient != null) // WebSocketClient.Open(); //} /// <summary> /// Führt einen JsonCommand aus. Dies kann entweder über eine TCP-Verbindung oder über eine URL (Webservice) geschehen /// </summary> /// <param name="cmd"></param> /// <returns></returns> public async Task <JsonCommandRetValue> DoCommand(JsonCommand cmd) { // sicherstellen, daß der User und der Token immer mitgeschickt werden cmd.SetParameter("user", this.Username); cmd.SetParameter("token", this.Token); JsonCommandRetValue retval = await MakeUrlRequest(cmd); // Wir haben ja jetzt einen Auth-Service eingebaut, damit nicht jeder Hinz und Kunz hier JsonCommands absetzen kann ;-) // Daher muss ich jetzt die 401-Meldungen abfangen if (retval.ReturnCode == 401) { // 401 = unauthorisiert, nun einfach einen login-command senden, und dann prüfen, ob dann der command durchgeht JsonCommand authCommand = new JsonCommand("", "Login"); authCommand.SetParameter("user", Username); authCommand.SetParameter("password", _Password); JsonCommandRetValue authCommandRetValue = await MakeUrlRequest(authCommand); if (authCommandRetValue.ReturnCode == 200 || authCommandRetValue.ReturnCode == 1) { // Login erfolgreich, also wieder den alten JsonCommand senden this.Token = authCommandRetValue.ReturnValue; cmd.SetParameter("token", this.Token); return(await MakeUrlRequest(cmd)); } else { // Login fehlgeschlagen, ich gebe den LoginRetValue zurück return(authCommandRetValue); } } else { return(retval); } }
/// <summary> /// Diese Methode erzeugt eine Url, die direkt abgesetzt werden kann. Diese URL enthält alle Parameter, die im /// JsonCommand angegeben sind. Achtung! Es kann kein Content übergeben werden! /// </summary> /// <param name="cmd"></param> /// <returns></returns> public string BuildCommandUrl(JsonCommand cmd) { StringBuilder sb = new StringBuilder(); sb.Append(CommandUrl + "&user="******"&token=" + Token + "&modulename=" + cmd.ModuleName + "&commandname=" + cmd.CommandName); Dictionary <string, string> parameterList = cmd.GetParameterList(); foreach (string key in parameterList.Keys) { sb.Append("&" + key + "=" + parameterList[key]); } return(sb.ToString()); }
private async Task <JsonCommandRetValue> MakeUrlRequest(JsonCommand cmd) { try { using (var client = new HttpClient()) { var stringContent = new StringContent(JsonConvert.SerializeObject(cmd), Encoding.UTF8, "application/json"); // Utils.Security.Cryptography.EncryptStringAES(cmd.ToJson().ToString())); stringContent.Headers.Add("X-JsonCommand", cmd.CommandName); HttpResponseMessage response = await client.PostAsync(CommandUrl, stringContent); if (response.IsSuccessStatusCode) { if (response.Content != null) { string json = await response.Content.ReadAsStringAsync(); JsonCommandRetValue retval = new JsonCommandRetValue(json); return(retval); } } else { //Console.WriteLine("Failed to publish: HTTP " + response.StatusCode); if (response.Content != null) { string json = await response.Content.ReadAsStringAsync(); JsonCommandRetValue retval = new JsonCommandRetValue(-1, "Failed to publish: HTTP " + response.StatusCode); retval.ReturnValue = json; return(retval); } } } } catch (Exception ex) { string s = ex.Message + "\r\n" + ex.StackTrace; return(new JsonCommandRetValue(-1, "Fehler bei JsonCommandClient.MakeUrlRequest: " + ex.ToString(true))); } return(new JsonCommandRetValue()); }
public JsonCommandEventArgs(JsonCommand command) { JsonCommand = command; }