Beispiel #1
0
        private Task <bool> CheckAuthentication(WebSocketMessage message, WebSocketType type)
        {
            if (!string.Equals(message.Type, "auth", StringComparison.InvariantCultureIgnoreCase))
            {
                return(Task.FromResult(false));
            }

            if (!string.Equals(message.Value, type.ToString(), StringComparison.InvariantCultureIgnoreCase))
            {
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
Beispiel #2
0
        /// <summary>
        /// Parse VAL message from Websocket server.
        /// </summary>
        /// <param name="jsonmsg">JSONMessage</param>
        /// <param name="wsClientType">WebsocketClientType</param>
        private void parseVALMessage(string jsonmsg, WebSocketType wsClientType)
        {
            //Ignore "DMY" message. (DMY message is sent from server in order to keep-alive wifi connection (to prevent wifi low-power(high latency) mode).
            if (jsonmsg == "DMY")
            {
                return;
            }

            string receivedJSONMode;

            try
            {
                JObject jobject = JObject.Parse(jsonmsg);
                receivedJSONMode = jobject.Property("mode").Value.ToString();
            }
            catch (KeyNotFoundException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (JsonReaderException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (JsonException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }

            try
            {
                if (receivedJSONMode == ValueJSONFormat.ModeCode)
                {
                    ValueJSONFormat valJson = JsonConvert.DeserializeObject <ValueJSONFormat>(jsonmsg);
                    valJson.Validate();

                    switch (wsClientType)
                    {
                    case WebSocketType.DEFI:
                        foreach (String code in valJson.val.Keys)
                        {
                            double value = double.Parse(valJson.val[code]);
                            if (code == DefiParameterCode.Engine_Speed.ToString())
                            {
                                this.engineRev = value;
                            }
                            else
                            {
                                throw new InvalidOperationException("Unexpected parameter code is returned on parsing VAL. ServerType:" + wsClientType.ToString() + " Code:" + code);
                            }
                        }
                        break;

                    case WebSocketType.SSM:
                        foreach (string code in valJson.val.Keys)
                        {
                            double value = double.Parse(valJson.val[code]);
                            if (code == SSMParameterCode.Vehicle_Speed.ToString())
                            {
                                this.vehicleSpeed = value;
                            }
                            else if (code == SSMParameterCode.Engine_Speed.ToString())
                            {
                                this.engineRev = value;
                            }
                            else if (code == SSMParameterCode.Fuel_Injection_1_Pulse_Width.ToString())
                            {
                                this.injPulseWidth = value;
                            }
                            else if (code == SSMParameterCode.Mass_Air_Flow.ToString())
                            {
                                this.massAirFlow = value;
                            }
                            else if (code == SSMParameterCode.Air_Fuel_Sensor_1.ToString())
                            {
                                this.afRatio = value;
                            }
                            else
                            {
                                throw new InvalidOperationException("Unexpected parameter code is returned on parsing VAL. ServerType:" + wsClientType.ToString() + " Code:" + code);
                            }
                        }
                        break;

                    case WebSocketType.ARDUINO:
                        foreach (string code in valJson.val.Keys)
                        {
                            double value = double.Parse(valJson.val[code]);
                            if (code == ArduinoParameterCode.Engine_Speed.ToString())
                            {
                                this.engineRev = value;
                            }
                            else if (code == ArduinoParameterCode.Vehicle_Speed.ToString())
                            {
                                this.vehicleSpeed = value;
                            }
                            else
                            {
                                throw new InvalidOperationException("Unexpected parameter code is returned on parsing VAL. ServerType:" + wsClientType.ToString() + " Code:" + code);
                            }
                        }
                        break;

                    case WebSocketType.ELM327:
                        foreach (string code in valJson.val.Keys)
                        {
                            double value = double.Parse(valJson.val[code]);
                            if (code == OBDIIParameterCode.Engine_Speed.ToString())
                            {
                                this.engineRev = value;
                            }
                            else if (code == OBDIIParameterCode.Vehicle_Speed.ToString())
                            {
                                this.vehicleSpeed = value;
                            }
                            else if (code == OBDIIParameterCode.Mass_Air_Flow.ToString())
                            {
                                this.massAirFlow = value;
                            }
                            else if (code == OBDIIParameterCode.Command_equivalence_ratio.ToString())
                            {
                                this.afRatio = value;
                            }
                            else if (code == OBDIIParameterCode.Engine_fuel_rate.ToString())
                            {
                                this.fuelRate = value;
                            }
                            else
                            {
                                throw new InvalidOperationException("Unexpected parameter code is returned on parsing VAL. ServerType:" + wsClientType.ToString() + " Code:" + code);
                            }
                        }
                        break;
                    }

                    //Finally fire VALMessageReceived event
                    VALMessageParsed(this, null);
                }
                else if (receivedJSONMode == ErrorJSONFormat.ModeCode)
                {
                    ErrorJSONFormat err_json = JsonConvert.DeserializeObject <ErrorJSONFormat>(jsonmsg);
                    err_json.Validate();
                    logger.Error("Error occured from " + wsClientType.ToString() + ":" + err_json.msg);
                }
                else if (receivedJSONMode == ResponseJSONFormat.ModeCode)
                {
                    ResponseJSONFormat res_json = JsonConvert.DeserializeObject <ResponseJSONFormat>(jsonmsg);
                    res_json.Validate();
                    logger.Info("Response from " + wsClientType.ToString() + ":" + res_json.msg);
                }
            }
            catch (JSONFormatsException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (JsonException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (KeyNotFoundException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (FormatException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
            catch (InvalidOperationException ex)
            {
                logger.Error(ex.GetType().ToString() + " " + ex.Message + " JSON:" + jsonmsg);
                return;
            }
        }