public doPublish(PublishMessageType[] PublishMessageContainer)
 {
     this.PublishMessageContainer = PublishMessageContainer;
 }
示例#2
0
        private Message GetPublishMessage(PublishMessageType type)
        {
            Message        message = new Message();
            ResourceRecord record;

            // This message is a response
            message.QueryResponse = true;
            // This is an authoritative response
            message.AuthoritativeAnswer = true;

            // SRV Record
            record = new SRVRecord()
            {
                TimeToLive = (type == PublishMessageType.Stop) ? TimeSpan.Zero : BroadcastTTL,
                CacheFlush = true,
                Name       = FullServiceInstanceName,
                Target     = Hostname,
                Port       = Port,
            };
            message.AnswerRecords.Add(record);

            // TXT Record
            if (TXTRecordData != null && TXTRecordData.Count > 0)
            {
                record = new TXTRecord()
                {
                    TimeToLive = (type == PublishMessageType.Stop) ? TimeSpan.Zero : BroadcastTTL,
                    CacheFlush = true,
                    Name       = FullServiceInstanceName,
                    Data       = TXTRecordData,
                };
                message.AnswerRecords.Add(record);
            }

            // PTR Record for DNS-SD Service Type Enumeration
            if (type == PublishMessageType.Normal)
            {
                record = new PTRRecord()
                {
                    TimeToLive = BroadcastTTL,
                    Name       = BonjourUtility.DNSSDServiceTypeEnumerationName,
                    DomainName = Type,
                };
                message.AnswerRecords.Add(record);
            }

            // Service PTR Record
            if (type != PublishMessageType.Initial)
            {
                record = new PTRRecord()
                {
                    TimeToLive = (type == PublishMessageType.Stop) ? TimeSpan.Zero : BroadcastTTL,
                    Name       = Type,
                    DomainName = FullServiceInstanceName,
                };
                message.AnswerRecords.Add(record);
            }

            // A Records
            if (type != PublishMessageType.Stop)
            {
                foreach (var ip in IPAddresses)
                {
                    record = new ARecord()
                    {
                        TimeToLive = BroadcastTTL,
                        CacheFlush = true,
                        Name       = Hostname,
                        Address    = ip,
                    };
                    message.AdditionalRecords.Add(record);
                }
            }

            return(message);
        }