コード例 #1
0
        public Channel(IPAddress ip, int port)
        {
            var settings = new MulticastSettings {
                Address = ip, Port = port, TimeToLive = 3
            };

            _listener    = new MulticastListener(settings);
            _broadcaster = new MulticastBroadcaster(settings);

            _subject = new Subject <Message>();

            _listener.Received.Subscribe(OnReceive);
        }
コード例 #2
0
            private void BroadcastCallback(IAsyncResult ar)
            {
                try
                {
                    MulticastBroadcaster broadcaster = (MulticastBroadcaster)(ar.AsyncState);

                    UdpClient udpClient = broadcaster.UdpClient;
                    int       bytesSent = udpClient.EndSend(ar);
                }
                catch (ObjectDisposedException)
                {
                    // expected exception fired when the socket is closed - swallow it up
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
コード例 #3
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            Console.WriteLine("Send");

            // Act
            using (var broadcaster = new MulticastBroadcaster(testSettings))
            {
                c++;

                //var n = c + " hello world";
                var n =
                    new XElement("y",
                                 new XAttribute("c", "" + c),
                                 "hello world"
                                 ).ToString();

                //c + " hello world";

                broadcaster.Broadcast(Encoding.UTF8.GetBytes(n));
            }
        }
コード例 #4
0
        /// <summary>
        ///     构造器
        /// </summary>
        /// <remarks>
        ///     远程节点启动时会绑定所有网络接口以进行接收
        /// </remarks>
        /// <param name="name">节点名字</param>
        /// <param name="size">组播分片长度</param>
        /// <param name="group">组播地址</param>
        /// <param name="newMemberDetected">发现新成员上线时的回调</param>
        /// <param name="additions">自定义组件</param>
        public RemoteHub(string name      = null,
                         uint size        = 0x4000,
                         IPEndPoint group = null,
                         Action <string> newMemberDetected = null,
                         params IComponent[] additions
                         )
        {
            _groupMonitor = new GroupMonitor(detected: newMemberDetected);
            _broadcaster  = new MulticastBroadcaster(size);

            _scope = new DynamicScope();
            _scope.Setup(new Name(name ?? $"RemoteHub[{Guid.NewGuid()}]"));

            _scope.Setup(_group);
            _scope.Setup(_groupMonitor);

            _scope.Setup(_networks);
            _scope.Setup(new MulticastSockets(group ?? Default.Group));
            _scope.Setup(Monitor);
            _scope.Setup(_broadcaster);
            _scope.Setup(_receiver);
            _scope.Setup(_slicer);

            _scope.Setup(_addresses);
            _scope.Setup(_servers);
            _scope.Setup(_synchronizer1);
            _scope.Setup(_synchronizer2);

            _scope.Setup(_client);
            _scope.Setup(_server);

            Monitor.BindAll();

            foreach (var dependency in additions)
            {
                _scope.Setup(dependency);
            }
        }
コード例 #5
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            Console.WriteLine("Send");

            // Act
            using (var broadcaster = new MulticastBroadcaster(testSettings))
            {
                c++;

                //var n = c + " hello world";
                var n =
                    new XElement("y",
                        new XAttribute("c", "" + c),
                        "hello world"
                    ).ToString();

                //c + " hello world";

                broadcaster.Broadcast(Encoding.UTF8.GetBytes(n));

            }

        }