Exemple #1
0
        public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId)
        {
            //Fill in addition details
            packet.Header.SourceId      = sourceId;
            packet.Header.DestinationId = targetId;

            //Sub Devices
            if (targetId is SubDeviceUId)
            {
                packet.Header.SubDevice = ((SubDeviceUId)targetId).SubDeviceId;
            }

            //Create Rdm Packet
            using (var rdmData = new MemoryStream())
            {
                var rdmWriter = new RdmBinaryWriter(rdmData);

                //Write the RDM packet
                RdmPacket.WritePacket(packet, rdmWriter);

                //Write the checksum
                rdmWriter.WriteNetwork((short)(RdmPacket.CalculateChecksum(rdmData.GetBuffer()) + (int)RdmVersions.SubMessage + (int)DmxStartCodes.RDM));

                //Create sACN Packet
                var rdmPacket = new ArtRdmPacket();
                rdmPacket.Address      = (byte)targetAddress.Universe;
                rdmPacket.SubStartCode = (byte)RdmVersions.SubMessage;
                rdmPacket.RdmData      = rdmData.GetBuffer();

                Send(rdmPacket, targetAddress);

                RdmPacketSent?.Invoke(this, new NewPacketEventArgs <RdmPacket>(new IPEndPoint(targetAddress.IpAddress, Port), packet));
            }
        }
Exemple #2
0
 protected void RaiseNewRdmPacket(RdmEndPoint source, RdmPacket packet)
 {
     if (NewRdmPacket != null)
     {
         NewRdmPacket(this, new NewPacketEventArgs <RdmPacket>(source, packet));
     }
 }
Exemple #3
0
        public void SendRdm(List <RdmPacket> packets, RdmEndPoint targetAddress, UId targetId)
        {
            if (packets.Count < 1)
            {
                throw new ArgumentException("Rdm packets list is empty.");
            }

            RdmPacket primaryPacket = packets[0];

            //Create sACN Packet
            ArtRdmSubPacket rdmPacket = new ArtRdmSubPacket();

            rdmPacket.DeviceId    = targetId;
            rdmPacket.RdmVersion  = (byte)RdmVersions.SubMessage;
            rdmPacket.Command     = primaryPacket.Header.Command;
            rdmPacket.ParameterId = primaryPacket.Header.ParameterId;
            rdmPacket.SubDevice   = (short)primaryPacket.Header.SubDevice;
            rdmPacket.SubCount    = (short)packets.Count;

            MemoryStream    rdmData    = new MemoryStream();
            RdmBinaryWriter dataWriter = new RdmBinaryWriter(rdmData);

            foreach (RdmPacket item in packets)
            {
                RdmPacket.WritePacket(item, dataWriter, true);
            }

            rdmPacket.RdmData = rdmData.ToArray();

            Send(rdmPacket, targetAddress);
        }
Exemple #4
0
        private void StartRdmDiscovery(RdmEndPoint endpoint)
        {
            DiscoveryState.Set request = new DiscoveryState.Set();
            request.EndpointID     = (short)endpoint.Universe;
            request.DiscoveryState = DiscoveryState.DiscoveryStates.Full;

            rdmNetSocket.SendRdm(request, new RdmEndPoint(endpoint, 0), endpoint.Id);
        }
Exemple #5
0
        /// <summary>
        /// Sends the specified packet using unicast to a specific DJ Tap device.
        /// </summary>
        /// <param name="packet">The packet to send on the network.</param>
        /// <param name="address">The address of the device to send the packet to.</param>
        public void Send(DJTapPacket packet, RdmEndPoint address)
        {
            MemoryStream      data   = new MemoryStream();
            DJTapBinaryWriter writer = new DJTapBinaryWriter(data);

            packet.WriteData(writer);
            SendTo(data.ToArray(), new IPEndPoint(address.IpAddress, Port));
        }
Exemple #6
0
        /// <summary>
        /// Gets the universe index for a specific endpoint address.
        /// </summary>
        /// <param name="address">The device address.</param>
        /// <returns>
        /// The DMX universe that this address resolves to.
        /// </returns>
        /// <exception cref="System.InvalidOperationException">No transport exists for this device address.</exception>
        /// <remarks>
        /// The transport may wish to resolve this to an internal addressing scheme.
        /// </remarks>
        public int ResolveEndpointToUniverse(RdmEndPoint address)
        {
            IRdmTransport transport = GetTransportForDevice(address.Id);

            if (transport == null)
            {
                throw new InvalidOperationException("No transport exists for this device address.");
            }
            return(transport.ResolveEndpointToUniverse(address));
        }
Exemple #7
0
        public RdmDeviceBroker(IRdmSocket socket, UId id, RdmEndPoint address)
        {
            Id          = id;
            Address     = address;
            this.socket = socket;

            RegisterHandlers(this);

            socket.NewRdmPacket += new EventHandler <NewPacketEventArgs <RdmPacket> >(socket_NewRdmPacket);
        }
Exemple #8
0
        public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId)
        {
            List <RdmRouteBinding> transportsToUse = router.GetTransportsRoutes(targetId);

            //Send the packet on all transports.
            foreach (RdmRouteBinding binding in transportsToUse)
            {
                binding.Transport.Socket.SendRdm(packet, targetAddress, targetId, sourceId);
            }
        }
Exemple #9
0
 public void AddKnownDevice(RdmEndPoint endpoint)
 {
     if (!devices.ContainsKey(endpoint))
     {
         HealthCheckedTcpSocket device = HealthCheckedTcpSocket.Connect(endpoint, SenderId);
         device.UnhandledException += device_UnhandledException;
         device.NewRdmPacket       += device_NewRdmPacket;
         devices.Add(endpoint, device);
     }
 }
Exemple #10
0
        public static HealthCheckedTcpSocket Connect(RdmEndPoint endpoint, Guid senderId)
        {
            Socket newConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            newConnection.Connect(endpoint);

            HealthCheckedTcpSocket socket = new HealthCheckedTcpSocket(newConnection, endpoint.Id, senderId, string.Empty);

            socket.Open(endpoint);
            return(socket);
        }
Exemple #11
0
        private void ProcessDeviceListChange(IPEndPoint endpoint, RdmPacket packet)
        {
            EndpointDeviceListChange.Reply reply = packet as EndpointDeviceListChange.Reply;
            if (reply != null && Socket != null)
            {
                RdmEndPoint source = new RdmEndPoint(endpoint, reply.EndpointID);

                EndpointDevices.Get request = new EndpointDevices.Get();
                request.EndpointID = reply.EndpointID;
                Socket.SendRdm(request, new RdmEndPoint(endpoint, 0), packet.Header.SourceId);
            }
        }
Exemple #12
0
 void slpUser_ServiceFound(object sender, ServiceFoundEventArgs e)
 {
     foreach (UrlEntry url in e.Urls)
     {
         RdmEndPoint controlEndpoint = new RdmEndPoint(new IPEndPoint(e.Address.Address, RdmNetSocket.RdmNetPort), 0)
         {
             Id = UId.ParseUrl(url.Url)
         };
         ControlEndpoints.Add(controlEndpoint);
         DiscoverEndpoints(controlEndpoint);
     }
 }
Exemple #13
0
 private void ProcessDeviceList(IPEndPoint endpoint, RdmPacket packet)
 {
     EndpointDevices.Reply reply = packet as EndpointDevices.Reply;
     if (reply != null)
     {
         RdmEndPoint source = new RdmEndPoint(endpoint, reply.EndpointID);
         foreach (UId id in reply.DeviceIds)
         {
             NewDeviceFound(this, new DeviceFoundEventArgs(id, source));
         }
     }
 }
Exemple #14
0
        public RdmDeviceModel(TreeNode node, IRdmSocket socket, UId id, RdmEndPoint address)
        {
            CreateHandle();

            broker = new RdmDeviceBroker(socket, id, address);

            Node     = node;
            Node.Tag = this;

            broker.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(RdmDeviceModel_PropertyChanged);

            UpdateNodeName();
        }
Exemple #15
0
        public RdmDeviceBroker(IEnumerable <IRdmSocket> sockets, UId id, RdmEndPoint address)
        {
            Id           = id;
            Address      = address;
            this.sockets = sockets;

            RegisterHandlers(this);

            foreach (var socket in sockets)
            {
                socket.NewRdmPacket += new EventHandler <NewPacketEventArgs <RdmPacket> >(socket_NewRdmPacket);
            }
        }
Exemple #16
0
        private void AddDevice(UId id, RdmEndPoint address)
        {
            if (!devices.ContainsKey(id))
            {
                RdmDeviceModel device = new RdmDeviceModel(new TreeNode(id.ToString()), Transport.Socket, id, address);
                devices[id] = device;
                rdmDevices.Nodes.Add(device.Node);

                if (AutoInterogate)
                {
                    device.Interogate();
                }
            }
        }
 void dnsSD_ServiceAdded(object o, ServiceBrowseEventArgs args)
 {
     args.Service.Resolved += delegate(object sender, ServiceResolvedEventArgs e)
     {
         IResolvableService s = (IResolvableService)e.Service;
         foreach (IPAddress address in s.HostEntry.AddressList)
         {
             RdmEndPoint controlEndpoint = new RdmEndPoint(new IPEndPoint(address, RdmNetSocket.RdmNetPort), 0)
             {
                 Id = UId.ParseUrl(s.TxtRecord["id"].ValueString)
             };
             ControlEndpoints.Add(controlEndpoint);
             DiscoverEndpoints(controlEndpoint);
         }
     };
     args.Service.Resolve();
 }
Exemple #18
0
        public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId)
        {
            if (BlockRDM)
            {
                return;
            }

            List <RdmRouteBinding> transportsToUse = router.GetTransportsRoutes(targetId);

            //Send the packet on all transports.
            foreach (RdmRouteBinding binding in transportsToUse)
            {
                foreach (IRdmSocket socket in binding.Transport.Sockets)
                {
                    socket.SendRdm(packet, targetAddress, targetId, sourceId);
                }
            }
        }
Exemple #19
0
        public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId)
        {
            if (BlockRDM)
            {
                return;
            }

            //Fill in addition details
            packet.Header.SourceId      = sourceId;
            packet.Header.DestinationId = targetId;

            SubDeviceUId id = targetId as SubDeviceUId;

            if (id != null)
            {
                packet.Header.SubDevice = id.SubDeviceId;
            }

            //Create Rdm Packet
            MemoryStream    rdmData   = new MemoryStream();
            RdmBinaryWriter rdmWriter = new RdmBinaryWriter(rdmData);

            //Write the RDM sub-start code.
            rdmWriter.Write((byte)RdmVersions.SubMessage);

            //Write the RDM packet
            RdmPacket.WritePacket(packet, rdmWriter);

            //Write the checksum
            rdmWriter.WriteNetwork((short)RdmPacket.CalculateChecksum(rdmData.GetBuffer()) + (byte)DmxStartCodes.RDM);

            //Create sACN Packet
            RdmNetPacket dmxPacket = new RdmNetPacket();

            dmxPacket.Framing.SourceName = SourceName;
            dmxPacket.Framing.EndpointID = (short)targetAddress.Universe;
            dmxPacket.RdmNet.RdmData     = rdmData.GetBuffer();

            SendPacket(dmxPacket, targetAddress);

            RaiseRdmPacketSent(new NewPacketEventArgs <RdmPacket>(targetAddress, packet));
        }
Exemple #20
0
        private void ProcessEndpointList(IPEndPoint endpoint, RdmPacket packet)
        {
            EndpointList.Reply reply = packet as EndpointList.Reply;
            if (reply != null)
            {
                foreach (int endpointId in reply.EndpointIDs)
                {
                    RdmEndPoint target = new RdmEndPoint(endpoint, endpointId)
                    {
                        Id = packet.Header.SourceId
                    };
                    DiscoveredEndpoints.Add(target);

                    EndpointDevices.Get request = new EndpointDevices.Get();
                    request.EndpointID = (short)endpointId;
                    if (Socket != null)
                    {
                        Socket.SendRdm(request, new RdmEndPoint(endpoint, 0), packet.Header.SourceId);
                    }
                }
            }
        }
Exemple #21
0
 public int ResolveEndpointToUniverse(RdmEndPoint address)
 {
     throw new NotImplementedException();
 }
 public DeviceFoundEventArgs(UId id, RdmEndPoint address)
 {
     this.id        = id;
     this.ipAddress = address;
 }
Exemple #23
0
 private void DiscoverEndpoints(RdmEndPoint endpoint)
 {
     EndpointList.Get getEndpoints = new EndpointList.Get();
     getEndpoints.Header.DestinationId = endpoint.Id;
     rdmNetSocket.SendRdm(getEndpoints, endpoint, endpoint.Id);
 }
Exemple #24
0
 public void RemoveKnownDevice(RdmEndPoint endpoint)
 {
 }
Exemple #25
0
 public void Send(ArtNetPacket packet, RdmEndPoint address)
 {
     SendTo(packet.ToArray(), new IPEndPoint(address.IpAddress, Port));
 }
Exemple #26
0
 public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId)
 {
     SendRdm(packet, targetAddress, targetId, RdmId);
 }