Beispiel #1
0
        /// <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;
                }
            };
        }