예제 #1
0
        public void MulticastMsg(ViewMsg msg)
        {
            msg.Source = ThisMetaserverId;
            msg.Status = GetStatus(ThisMetaserverId);

            ViewElementsMutex.WaitOne( );
            //Contact other servers
            for (int id = 0; id < ViewElements.Length; id++)
            {
                if (id == ThisMetaserverId)
                {
                    continue;
                }
                // if ( GetStatus( id ) == ServerStatus.Off )
                //   continue;
                msg.Destination = id;
                log.Debug(DateTime.Now.Ticks + " [M] Multicast View: " + msg.Status);
                IMetaToMeta   server    = MetadataServer.ConnectToMetaserver(id);
                BullyDel      invokeDel = new BullyDel(server.BullyRequestsRetrival);
                AsyncCallback callback  = new AsyncCallback(BullyResponse);
                try
                {
                    Console.WriteLine("Multicast: " + msg + " to " + msg.Destination);
                    invokeDel.BeginInvoke(msg, callback, null);
                }
                catch (SocketException)
                {
                    UpdateViewServerState(ServerStatus.Off, id, null);
                }
            }
            ViewElementsMutex.ReleaseMutex( );
        }
예제 #2
0
        /// <summary>
        /// Aqui recebo as respostas
        /// </summary>
        /// <param name="ar"></param>
        private void BullyResponse(IAsyncResult ar)
        {
            BullyDel del = (BullyDel)((AsyncResult)ar).AsyncDelegate;
            ViewMsg  msg = del.EndInvoke(ar);

            new ProcessResponseDel(ProcessResponse).Invoke(msg);
        }