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( ); }
/// <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); }