コード例 #1
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
 public string BroadcastDeadServersToServer(AckController ackController, IServer server, string url, string deadServer)
 {
     Console.WriteLine("going to send dead server {0}", deadServer);
     server.ReceiveDeadServers(deadServer);
     ackController.N_acks++;
     return(url);
 }
コード例 #2
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
 public string BroadcastUpdateLocationToServer(AckController ackController, IServer server, string url, Location location)
 {
     Console.WriteLine("going to send updated location {0}", location.Name);
     server.ReceiveUpdateLocation(location);
     ackController.N_acks++;
     return(url);
 }
コード例 #3
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
 public string BroadcastCloseToServer(AckController ackController, IServer server, string url, MeetingProposal proposal)
 {
     Console.WriteLine("going to send close {0}", proposal.Topic);
     server.ReceiveClose(proposal, _meetingsClocks[proposal.Topic]);
     ackController.N_acks++;
     return(url);
 }
コード例 #4
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        public string BroadcastJoinToServer(AckController ackController, IServer server, string url, string username, MeetingProposal proposal, MeetingRecord record)
        {
            Console.WriteLine("going to send join {0}", proposal.Topic);
            server.ReceiveJoin(username, proposal, record, _meetingsClocks[proposal.Topic]);
            ackController.N_acks++;

            return(url);
        }
コード例 #5
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        public string BroadcastNewMeetingToServer(AckController ackController, IServer server, string url, MeetingProposal proposal)
        {
            Console.WriteLine("going to inform server of new meeting {0}", proposal.Topic);
            server.ReceiveNewMeeting(proposal, _meetingsClocks[proposal.Topic]);
            ackController.N_acks++;

            return(url);
        }
コード例 #6
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        //BROADCAST LOCATION

        public void BroadcastUpdateLocation(Location location)
        {
            AckController ackController = new AckController();

            foreach (KeyValuePair <string, IServer> server in _servers)
            {
                _broadcastUpdateLocationDelegate.BeginInvoke(ackController, server.Value, server.Key, location, BroadcastUpdateLocationCallback, server.Key);
            }

            WaitForMaxFault(ackController);
        }
コード例 #7
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        //BROADCAST DEAD SERVERS
        public void BroadcastDeadServers(string deadServer)
        {
            AckController ackController = new AckController();

            foreach (KeyValuePair <string, IServer> server in _servers)
            {
                if (_serversStatus[server.Key] == false)
                {
                    _broadcastDeadServersDelegate.BeginInvoke(ackController, server.Value, server.Key, deadServer, BroadcastDeadServersCallback, server.Key);
                }
            }

            WaitForMaxFault(ackController);
        }
コード例 #8
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        //BROADCAST CLOSE

        public void BroadcastClose(MeetingProposal proposal)
        {
            AckController ackController = new AckController();

            foreach (KeyValuePair <string, IServer> server in _servers)
            {
                if (_serversStatus[server.Key] == false)
                {
                    _broadcastCloseDelegate.BeginInvoke(ackController, server.Value, server.Key, proposal, BroadcastCloseCallback, server.Key);
                }
            }

            WaitForMaxFault(ackController);
        }
コード例 #9
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        //BROADCAST JOIN

        public void BroadcastJoin(string username, MeetingProposal proposal, MeetingRecord record)
        {
            AckController ackController = new AckController();

            foreach (KeyValuePair <string, IServer> server in _servers)
            {
                if (_serversStatus[server.Key] == false)
                {
                    _broadcastJoinDelegate.BeginInvoke(ackController, server.Value, server.Key, username, proposal, record, BroadcastJoinCallback, server.Key);
                }
            }

            WaitForMaxFault(ackController);
        }
コード例 #10
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        public void WaitForMaxFault(AckController ackController)
        {
            //int n_acks = 0;
            while (true)
            {
                if (ackController.N_acks >= _maxFaults)
                {
                    break;
                }
                //Console.WriteLine("acks " + ackController.N_acks);
                //Console.WriteLine("maxFaults " + _maxFaults);
                //int index = WaitHandle.WaitAny(ackController.Handles);
                //n_acks++;

                /*Console.WriteLine("index" + index);
                 *
                 * var list_handle = new List<WaitHandle>(ackController.Handles);
                 * list_handle.RemoveAt(index);
                 * ackController.Handles = list_handle.ToArray();*/
            }
        }