Exemple #1
0
        /// <summary>
        /// Initialize ELM327COM websocket client.
        /// </summary>
        /// <param name="url">URL of the server.</param>
        /// <param name="codes">Parameter code list</param>
        /// <returns></returns>
        private WebSocket initializeELM327COMWSClient(string url, List <OBDIIParameterCode> codes)
        {
            if (codes.Count == 0)
            {
                return(null);
            }

            const WebSocketType WSType   = WebSocketType.ELM327;
            WebSocket           wsClient = new WebSocket(url);

            wsClient.Opened += (sender, e) =>
            {
                foreach (OBDIIParameterCode code in codes)
                {
                    // Send read packet both slow and fast readmode.
                    ELM327COMReadJSONFormat sendcode = new ELM327COMReadJSONFormat();
                    sendcode.code      = code.ToString();
                    sendcode.read_mode = ELM327COMReadJSONFormat.SlowReadModeCode;
                    sendcode.flag      = true;
                    wsClient.Send(sendcode.Serialize());

                    sendcode.read_mode = ELM327COMReadJSONFormat.FastReadModeCode;
                    wsClient.Send(sendcode.Serialize());
                }
            };
            wsClient.Error           += (sender, e) => wsErrorMsg(WSType.ToString(), e.Exception.ToString(), e.Exception.Message);
            wsClient.Closed          += (sender, e) => wsClosedReconnect(WSType.ToString(), wsClient);
            wsClient.MessageReceived += (sender, e) => parseVALMessage(e.Message, WSType);

            return(wsClient);
        }
        protected override void processReceivedJSONMessage(string receivedJSONmode, string message, WebSocketSession session)
        {
            var sessionparam = (ELM327WebsocketSessionParam)session.Items["Param"];

            switch (receivedJSONmode)
            {
            //ELM327 COM all reset
            case (ResetJSONFormat.ModeCode):
                sessionparam.reset();
                send_response_msg(session, "ELM327COM session RESET. All send parameters are disabled.");
                break;

            case (ELM327COMReadJSONFormat.ModeCode):
                ELM327COMReadJSONFormat msg_obj_elm327read = JsonConvert.DeserializeObject <ELM327COMReadJSONFormat>(message);
                msg_obj_elm327read.Validate();

                OBDIIParameterCode target_code = (OBDIIParameterCode)Enum.Parse(typeof(OBDIIParameterCode), msg_obj_elm327read.code);
                bool flag = msg_obj_elm327read.flag;

                if (msg_obj_elm327read.read_mode == ELM327COMReadJSONFormat.FastReadModeCode)
                {
                    sessionparam.FastSendlist[target_code] = flag;
                }
                else
                {
                    sessionparam.SlowSendlist[target_code] = flag;
                }
                send_response_msg(session, "EM327COM session read flag for : " + target_code.ToString() + " read_mode :" + msg_obj_elm327read.read_mode + " set to : " + flag.ToString());
                break;

            case (ELM327SLOWREADIntervalJSONFormat.ModeCode):
                ELM327SLOWREADIntervalJSONFormat msg_obj_interval = JsonConvert.DeserializeObject <ELM327SLOWREADIntervalJSONFormat>(message);
                msg_obj_interval.Validate();
                elm327com.SlowReadInterval = msg_obj_interval.interval;

                send_response_msg(session, "ELM327COM slowread interval to : " + msg_obj_interval.interval.ToString());
                break;

            default:
                throw new JSONFormatsException("Unsuppoted mode property.");
            }
        }