internal void SendFrame(KnxFrame frame) { lock (_lock) { Sender.SendFrame(frame); } }
internal override bool SendFrame(KnxFrame frame) { var byteFrame = frame.ToFrame(); KnxHelper.Logger.LogTrace($"Writing {frame}"); KnxHelper.Logger.LogHexOut(byteFrame); var length = _client?.Send(byteFrame, byteFrame.Length); return(length == byteFrame.Length); }
internal override bool SendFrame(KnxFrame frame) { var byteFrame = frame.ToFrame(); KnxHelper.Logger.LogTrace($"Writing {frame}"); KnxHelper.Logger.LogHexOut(byteFrame); try { var length = _client?.Send(byteFrame, byteFrame.Length); return(length == byteFrame.Length); } catch (Exception e) { KnxHelper.Logger.LogError(e, "Error writing value..."); } return(false); }
internal virtual void HandleFrame(KnxFrame frame) { _heartbeatMonitor.Reset(); switch (frame.ServiceType) { case KnxHelper.ServiceType.SearchRequest: break; case KnxHelper.ServiceType.SearchResponse: break; case KnxHelper.ServiceType.DescriptionRequest: break; case KnxHelper.ServiceType.DescriptionResponse: break; case KnxHelper.ServiceType.ConnectRequest: break; case KnxHelper.ServiceType.ConnectResponse: var connectResponse = (ConnectResponseFrame)frame; if (connectResponse.IsValid) { IndividualAddress = connectResponse.IndividualAddress; Connected = true; SetSequenceNumber(0); ChannelId = connectResponse.ChannelId; OnConnected?.Invoke(this, EventArgs.Empty); } else { OnDisconnected?.Invoke(this, EventArgs.Empty); Connected = false; } break; case KnxHelper.ServiceType.ConnectionstateRequest: break; case KnxHelper.ServiceType.ConnectionstateResponse: break; case KnxHelper.ServiceType.DisconnectRequest: SendFrame(new DisconnectResponseFrame(this)); Connected = false; OnDisconnected?.Invoke(this, EventArgs.Empty); break; case KnxHelper.ServiceType.DisconnectResponse: break; case KnxHelper.ServiceType.DeviceConfigurationRequest: break; case KnxHelper.ServiceType.DeviceConfigurationAck: break; case KnxHelper.ServiceType.TunnellingRequest: var p = (TunnelingRequestFrame)frame; var ack = new TunnelingAckFrame(this, p.FrameSequenceNumber); SendFrame(ack); if (KnxHelper.ProcessCemi(p.Datagram, p.CemiPacket)) { OnDatagramReceived?.Invoke(this, new KnxDatgramEventArgs(p.Datagram)); } break; case KnxHelper.ServiceType.TunnellingAck: break; case KnxHelper.ServiceType.RoutingIndication: break; case KnxHelper.ServiceType.RoutingLostMessage: break; case KnxHelper.ServiceType.SecureWrapper: break; case KnxHelper.ServiceType.SessionRequest: break; case KnxHelper.ServiceType.SessionResponse: break; case KnxHelper.ServiceType.SessionAuthenticate: break; case KnxHelper.ServiceType.SessionStatus: break; case KnxHelper.ServiceType.TimerNotify: break; case KnxHelper.ServiceType.Unknown: break; } }
internal abstract bool SendFrame(KnxFrame frame);