/// <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."); } }
// 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()); }