Created
February 14, 2019 08:24
-
-
Save shinyoshiaki/63e389aba1e5110c29c6c7de64ddc3c5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using Newtonsoft.Json; | |
| using Quobject.SocketIoClientDotNet.Client; | |
| using SimplePeerConnectionM; | |
| using System.Collections.Generic; | |
| namespace WebRTC | |
| { | |
| public class Signaling | |
| { | |
| public delegate void OnData(string s); | |
| public OnData OnDataMethod; | |
| PeerConnectionM peer; | |
| Socket socket = IO.Socket("https://aqueous-earth-75182.herokuapp.com/"); | |
| class RoomJson { public string roomId; } | |
| string roomId; | |
| Signaling(string room) { roomId = room; } | |
| void Create() | |
| { | |
| InitPeer(); | |
| var data = new RoomJson(); | |
| data.roomId = roomId; | |
| var json = new JSONObject(JsonConvert.SerializeObject(data)); | |
| socket.Emit("create", json); | |
| socket.On("sdp", SetSdp); | |
| } | |
| void Join() | |
| { | |
| InitPeer(); | |
| var data = new RoomJson(); | |
| data.roomId = roomId; | |
| var json = new JSONObject(JsonConvert.SerializeObject(data)); | |
| socket.Emit("join", json); | |
| socket.On("join", () => | |
| { | |
| peer.CreateOffer(); | |
| }); | |
| socket.On("sdp", SetSdp); | |
| } | |
| void InitPeer() | |
| { | |
| List<string> servers = new List<string>(); | |
| servers.Add("stun: stun.skyway.io:3478"); | |
| servers.Add("stun: stun.l.google.com:19302"); | |
| peer = new PeerConnectionM(servers, "", ""); | |
| peer.OnLocalSdpReadytoSend += OnLocalSdpReadytoSend; | |
| peer.OnIceCandiateReadytoSend += setIceCandidate; | |
| peer.AddDataChannel(); | |
| peer.OnLocalDataChannelReady += Connected; | |
| peer.OnDataFromDataChannelReady += Received; | |
| } | |
| class SdpJson { public string type; public string sdp; } | |
| class IceJson { public string candidate; public int sdpMline; public string sdpMid; } | |
| class SendSdpJson | |
| { | |
| public string sdp; | |
| public string roomId; | |
| } | |
| void OnLocalSdpReadytoSend(int id, string type, string sdp) | |
| { | |
| var sdpData = new SdpJson(); | |
| sdpData.sdp = sdp; | |
| sdpData.type = type; | |
| var data = new SendSdpJson(); | |
| data.roomId = roomId; | |
| data.sdp = new JSONObject(JsonConvert.SerializeObject(sdpData)).ToString(); | |
| var json = new JSONObject(JsonConvert.SerializeObject(data)); | |
| socket.Emit(roomId, json); | |
| } | |
| class SendIce | |
| { | |
| public string sdp; | |
| public string roomId; | |
| } | |
| public void setIceCandidate(int id, string candidate, int sdpMlineIndex, string sdpMid) | |
| { | |
| var iceData = new IceJson(); | |
| iceData.candidate = candidate; | |
| iceData.sdpMline = sdpMlineIndex; | |
| iceData.sdpMid = sdpMid; | |
| var data = new SendIce(); | |
| data.roomId = roomId; | |
| data.sdp = new JSONObject(JsonConvert.SerializeObject(iceData)).ToString(); | |
| var json = new JSONObject(JsonConvert.SerializeObject(data)); | |
| socket.Emit("ice", json); | |
| } | |
| public void Connected(int id) | |
| { | |
| var data = new RoomJson(); | |
| data.roomId = roomId; | |
| roomId = data.roomId; | |
| var json = new JSONObject(JsonConvert.SerializeObject(data)); | |
| socket.Emit("connect", json); | |
| } | |
| public void Received(int id, string s) | |
| { | |
| OnDataMethod(s); | |
| } | |
| void SetSdp(object raw) | |
| { | |
| var data = JsonConvert.DeserializeObject<SdpJson>(raw.ToString()); | |
| switch (data.type) | |
| { | |
| case "offer": | |
| peer.SetRemoteDescription(data.type, data.sdp); | |
| peer.CreateAnswer(); | |
| break; | |
| case "answer": | |
| peer.SetRemoteDescription(data.type, data.sdp); | |
| break; | |
| case "ice": | |
| var ice = JsonConvert.DeserializeObject<IceJson>(data.sdp.ToString()); | |
| peer.AddIceCandidate(ice.candidate, ice.sdpMline, ice.sdpMid); | |
| break; | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment