示例#1
0
            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));
            }
示例#3
0
            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));
            }
示例#4
0
 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;
 }
示例#5
0
            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;
            }