public override Writer <T> AddWriter <T>(string topic) { if (Socket.ReadyState != WebSocketState.Open) { throw new InvalidOperationException("socket not open"); } var type = GetMessageType <T>(); var sb = new StringBuilder(256); sb.Append('{'); { sb.Append("\"op\":\"advertise\","); sb.Append("\"topic\":\""); sb.Append(topic); sb.Append("\","); sb.Append("\"type\":\""); sb.Append(type); sb.Append("\""); } sb.Append('}'); TopicPublishers.Add(new Topic() { Name = topic, Type = type, }); Socket.SendAsync(sb.ToString(), ok => { }); return(new RosWriter <T>(this, topic)); }
public override Writer <T> AddWriter <T>(string topic) { var msgType = typeof(T).ToString(); string descriptorName = NameByMsgType[msgType]; FileDescriptorProto descriptor = DescriptorByName[descriptorName].Item2; var descriptors = new List <byte[]>(); GetDescriptors(descriptors, descriptor); int count = descriptors.Count; var data = new List <byte>(4096); data.Add((byte)Op.RegisterDesc); data.Add((byte)(count >> 0)); data.Add((byte)(count >> 8)); data.Add((byte)(count >> 16)); data.Add((byte)(count >> 24)); foreach (var s in descriptors) { int bytes = s.Length; data.Add((byte)(bytes >> 0)); data.Add((byte)(bytes >> 8)); data.Add((byte)(bytes >> 16)); data.Add((byte)(bytes >> 24)); data.AddRange(s); } var channel = System.Text.Encoding.ASCII.GetBytes(topic); byte[] descriptorData = DescriptorByName[descriptorName].Item1; var typeb = System.Text.Encoding.ASCII.GetBytes(msgType); data.Add((byte)Op.AddWriter); data.Add((byte)(channel.Length >> 0)); data.Add((byte)(channel.Length >> 8)); data.Add((byte)(channel.Length >> 16)); data.Add((byte)(channel.Length >> 24)); data.AddRange(channel); data.Add((byte)(typeb.Length >> 0)); data.Add((byte)(typeb.Length >> 8)); data.Add((byte)(typeb.Length >> 16)); data.Add((byte)(typeb.Length >> 24)); data.AddRange(typeb); TopicPublishers.Add(new Topic() { Name = topic, Type = typeof(T).ToString(), }); SendAsync(data.ToArray()); return(new CyberWriter <T>(this, topic)); }
public override Writer <T> AddWriter <T>(string topic) { var descriptor = MessageHelper <T> .Descriptor; var descriptors = new List <byte[]>(); GetDescriptors(descriptors, descriptor.File); int count = descriptors.Count; var data = new List <byte>(4096); data.Add((byte)Op.RegisterDesc); data.Add((byte)(count >> 0)); data.Add((byte)(count >> 8)); data.Add((byte)(count >> 16)); data.Add((byte)(count >> 24)); foreach (var s in descriptors) { int bytes = s.Length; data.Add((byte)(bytes >> 0)); data.Add((byte)(bytes >> 8)); data.Add((byte)(bytes >> 16)); data.Add((byte)(bytes >> 24)); data.AddRange(s); } var channel = System.Text.Encoding.ASCII.GetBytes(topic); var typeb = System.Text.Encoding.ASCII.GetBytes(descriptor.FullName); data.Add((byte)Op.AddWriter); data.Add((byte)(channel.Length >> 0)); data.Add((byte)(channel.Length >> 8)); data.Add((byte)(channel.Length >> 16)); data.Add((byte)(channel.Length >> 24)); data.AddRange(channel); data.Add((byte)(typeb.Length >> 0)); data.Add((byte)(typeb.Length >> 8)); data.Add((byte)(typeb.Length >> 16)); data.Add((byte)(typeb.Length >> 24)); data.AddRange(typeb); TopicPublishers.Add(new Topic() { Name = topic, Type = typeof(T).ToString(), }); SendAsync(data.ToArray()); return(new CyberWriter <T>(this, topic)); }
void OnClose(object sender, CloseEventArgs args) { //if (!args.WasClean) //{ // UnityEngine.Debug.LogError(args.Reason); //} Subscriptions.Clear(); Services.Clear(); QueuedActions.Clear(); QueuedSends.Clear(); TopicSubscriptions.Clear(); TopicPublishers.Clear(); Status = BridgeStatus.Disconnected; }
public override void Disconnect() { if (Socket == null) { return; } QueuedActions.Clear(); Buffer.Clear(); lock (Readers) { Readers.Clear(); } Status = BridgeStatus.Disconnected; TopicSubscriptions.Clear(); TopicPublishers.Clear(); Socket.Close(); Socket = null; }