/// <summary> /// Constructor injects the needed signaller /// and protocol. /// </summary> /// <param name="signaller"></param> /// <param name="protocol"></param> public ProtocolSignaller(IBasicSignaller signaller, MessageProtocol <T> protocol) { this.Signaller = signaller; this.Protocol = protocol; // Listen for when the basic signaller receives a // message. this.Signaller.ReceivedMessage += (sender, message) => { // Use the protocol to unwrap the raw string // into a Message<T> var result = this.Protocol.UnwrapMessage(message); this.ReceivedMessage?.Invoke(this, result); }; }
public WebRtcSignaller(IBasicSignaller signaller) { var protocol = new MessageProtocol <WebRtcMessage>(); this.Signaller = new ProtocolSignaller <WebRtcMessage>( signaller, protocol); this.Signaller.ReceivedMessage += (sender, message) => { switch (message.Type) { case WebRtcMessage.Offer: var offer = this.DeserializeSessionDescription(message.Contents); this.ReceivedOffer?.Invoke(this, offer); break; case WebRtcMessage.Answer: var answer = this.DeserializeSessionDescription(message.Contents); this.ReceivedAnswer?.Invoke(this, answer); break; case WebRtcMessage.IceCandidate: var init = JsonConvert.DeserializeObject <RTCIceCandidateInit>(message.Contents); var candidate = new RTCIceCandidate(init); this.ReceivedIceCandidate?.Invoke(this, candidate); break; case WebRtcMessage.Plain: this.ReceivedPlain?.Invoke(this, message.Contents); break; case WebRtcMessage.Shutdown: this.ReceivedShutdown?.Invoke(this, EventArgs.Empty); break; case WebRtcMessage.CursorUpdate: var update = JsonConvert.DeserializeObject <CursorUpdate>(message.Contents); this.ReceivedCursorUpdate?.Invoke(this, update); break; } }; }