コード例 #1
0
ファイル: LANDiscoverer.cs プロジェクト: sm6uax/plegma
        //------------------------------------------------------------------------------------------------------------------------
        #endregion

        #region Constructor
        //------------------------------------------------------------------------------------------------------------------------
        public LANDiscoverer(IDiscoveryMessageBase DiscoveryMessage, int DiscoveryMessageMaxSize = 1024, int BroadcastPort = DefaultBroadcastPort, int?ID = null)
        {
            DebugEx.Assert(DiscoveryMessage != null, "DiscoveryMessage cannot be null");
            if (DiscoveryMessage == null)
            {
                throw new NullReferenceException("DiscoveryMessage cannot be null");
            }

            //keep info
            this.BroadcastPort           = BroadcastPort;
            this.DiscoveryMessageMaxSize = DiscoveryMessageMaxSize;

            //set id
            if (ID.HasValue)
            {
                myID = ID.Value;
            }

            //generate id
            while (myID == 0)
#if NETFX
            { myID = MathTools.GetRandomNumber(0, 10000); }
#elif UNIVERSAL
            { myID = MathTools.GetRandomNumber(20000, 100000); }
#endif

            //update discovery message
            UpdateDiscoveryMessage(DiscoveryMessage);

            //hook event for shutdown
            Channel.OnSystemShutDownRequest.Add(Yodiwo.WeakAction <object> .Create(Deinitialize));
        }
コード例 #2
0
ファイル: LANDiscoverer.cs プロジェクト: sm6uax/plegma
        //------------------------------------------------------------------------------------------------------------------------
        public void UpdateDiscoveryMessage(IDiscoveryMessageBase _discoveryMessage)
        {
            try
            {
                DebugEx.Assert(_discoveryMessage != null, "DiscoveryMessage cannot be null");
                if (_discoveryMessage == null)
                {
                    throw new NullReferenceException("DiscoveryMessage cannot be null");
                }

                //setup id on message
                _discoveryMessage.Id = myID;

                //get size and type
                var _discoveryMessageType = _discoveryMessage.GetType();

                //create payload
                var data = Tools.Marshalling.ToBytes(_discoveryMessage);
                if (data == null)
                {
                    DebugEx.Assert("Could not get bytes from DicoveryMessage");
                }
                else
                {
                    var dataLen = data.Length;
                    Array.Resize <byte>(ref data, data.Length + 2);
                    for (int n = data.Length - 2; n >= 2; n--)
                    {
                        data[n] = data[n - 2];
                    }
                    data[0] = (byte)(dataLen & 0x000000FF);
                    data[1] = (byte)((dataLen & 0x0000FF00) >> 8);
                }

                //update
                this.DiscoveryMessage     = _discoveryMessage;
                this.DiscoveryMessageType = _discoveryMessageType;
                this.DiscoveryMessageData = data;
            }
            catch (Exception ex) { DebugEx.Assert(ex); }
        }