void ReceiveFromClientCB(byte[] bytes, object senderId) { try { var packet = Packet.Parse(new KaitaiStream(bytes), this); //MessageBox.Show(packet.Command.ToString()); switch (packet.Command) { case RcpTypes.Command.Version: { Log?.Invoke("received: version"); SendToOne(Pack(RcpTypes.Command.Version, RCP_PROTOCOL_VERSION), senderId); break; } case RcpTypes.Command.Update: { Log?.Invoke("received: update"); var param = packet.Data as Parameter; if (FParams.ContainsKey(param.Id)) { SendToMultiple(bytes, senderId); } param.RaiseEvents(); break; } case RcpTypes.Command.Updatevalue: { //TODO: actually only set the parameters value Log?.Invoke("received: update value"); var param = packet.Data as Parameter; if (FParams.ContainsKey(param.Id)) { SendToMultiple(bytes, senderId); } param.RaiseEvents(); break; } case RcpTypes.Command.Initialize: { Log?.Invoke("received: init"); //client requests all parameters foreach (var param in FParams.Values) { param.ResetForInitialize(); SendToOne(Pack(RcpTypes.Command.Update, param), senderId); } break; } } } catch (Exception e) { Trace.TraceError(e.Message); } }
void ReceiveCB(byte[] bytes) { //Logger.Log(LogType.Debug, "Client received: " + bytes.Length + "bytes"); var packet = Packet.Parse(new KaitaiStream(bytes), this); var parameter = packet.Data as Parameter; var id = parameter.Id; //Logger.Log(LogType.Debug, packet.Command.ToString()); switch (packet.Command) { case RcpTypes.Command.Update: if (!FParams.ContainsKey(id)) { AddParameter(parameter); } else { parameter.RaiseEvents(); } break; case RcpTypes.Command.Updatevalue: if (FParams.ContainsKey(id)) { parameter.RaiseEvents(); } break; case RcpTypes.Command.Remove: if (FParams.ContainsKey(id)) { RemoveParameter(parameter); } break; } }
public override void RemoveParameter(Parameter param) { FParams.Remove(param.Id); FParamsToRemove.Add(param); }
public void Initialize() { FParams.Clear(); SendPacket(Pack(RcpTypes.Command.Initialize)); }