예제 #1
0
        /// <summary>
        /// Initialize DefiCOM websocket client
        /// </summary>
        /// <param name="url">URL of the server</param>
        /// <param name="codes">parameter code list to activate</param>
        /// <returns></returns>
        private WebSocket initializeDefiCOMWSClient(string url, List <DefiParameterCode> codes)
        {
            if (codes.Count == 0)
            {
                return(null);
            }

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

            wsClient.Opened += (sender, e) =>
            {
                foreach (DefiParameterCode code in codes)
                {
                    DefiWSSendJSONFormat sendcode = new DefiWSSendJSONFormat();
                    sendcode.code = code.ToString();
                    sendcode.flag = true;

                    DefiWSIntervalJSONFormat definitervalcode = new DefiWSIntervalJSONFormat();
                    definitervalcode.interval = DEFI_ARDUINO_PACKET_INTERVAL;

                    wsClient.Send(sendcode.Serialize());
                    wsClient.Send(definitervalcode.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)
        {
            DefiCOMWebsocketSessionParam sessionparam = (DefiCOMWebsocketSessionParam)session.Items["Param"];

            switch (receivedJSONmode)
            {
            case (ResetJSONFormat.ModeCode):
                sessionparam.reset();
                send_response_msg(session, "Defi Websocket all parameter reset.");
                break;

            case (DefiWSSendJSONFormat.ModeCode):
                DefiWSSendJSONFormat msg_obj_wssend = JsonConvert.DeserializeObject <DefiWSSendJSONFormat>(message);
                msg_obj_wssend.Validate();
                sessionparam.Sendlist[(DefiParameterCode)Enum.Parse(typeof(DefiParameterCode), msg_obj_wssend.code)] = msg_obj_wssend.flag;

                send_response_msg(session, "Defi Websocket send_flag for : " + msg_obj_wssend.code.ToString() + " set to : " + msg_obj_wssend.flag.ToString());
                break;

            case (DefiWSIntervalJSONFormat.ModeCode):
                DefiWSIntervalJSONFormat msg_obj_interval = JsonConvert.DeserializeObject <DefiWSIntervalJSONFormat>(message);
                msg_obj_interval.Validate();
                sessionparam.SendInterval = msg_obj_interval.interval;

                send_response_msg(session, "Defi Websocket send_interval to : " + msg_obj_interval.interval.ToString());
                break;

            default:
                throw new JSONFormatsException("Unsuppoted mode property.");
            }
        }
예제 #3
0
        // deficom WS client event
        private void _deficom_ws_client_Opened(object sender, EventArgs e)
        {
            //Sleep 5sec in order to wait until the session is registered to the SSM WS session snapshot.
            //Thread.Sleep(5000);

            // initialize setting
            DefiWSSendJSONFormat defisendcode = new DefiWSSendJSONFormat();

            defisendcode.code = DefiParameterCode.Engine_Speed.ToString();
            defisendcode.flag = true;

            DefiWSIntervalJSONFormat definitervalcode = new DefiWSIntervalJSONFormat();

            definitervalcode.interval = DEFIPACKET_INTERVAL;

            _deficom_ws_client.Send(defisendcode.Serialize());
            _deficom_ws_client.Send(definitervalcode.Serialize());
        }