Esempio n. 1
0
        //update view of other servers
        public void updateView()
        {
            foreach (KeyValuePair <string, ServerInfo> pair in serverList)
            {
                if (pair.Value.isOnline == false)
                {
                    continue;                             //skip if offline
                }
                IServerToServer server = (IServerToServer)Activator.GetObject(
                    typeof(IServerToServer),
                    pair.Value.url_to_server);
                try{
                    server.ping();
                }catch (Exception ex) {
                    Log.Debug(ex, "Server {server} is offline", pair.Value.server_id);
                    pair.Value.isOnline = false;
                }
            }
            int count = 0;

            foreach (KeyValuePair <string, ServerInfo> pair in serverList)
            {
                if (pair.Value.isOnline == false)
                {
                    count++;
                }
            }
            Log.Debug("count of crashed servers: {c}", count);
            if (count > max_faults)
            {
                throw new ServerException("max faults reached");
            }
        }
Esempio n. 2
0
        void sendMeeting(ServerInfo serverInfo, MeetingProposal meeting, ref int consensus)
        {
            Log.Debug("sending {meeting} to {server}", meeting.topic, serverInfo.server_id);
            IServerToServer server = (IServerToServer)Activator.GetObject(
                typeof(IServerToServer),
                serverInfo.url_to_server);
            bool join = false;

            try{
                join = server.sendMeeting(meeting);
            } catch (Exception ex) {
                Log.Error(ex, "cannot send meeting");
                join = false;
            }
            if (join)
            {
                Log.Debug("{server} accepted {meeting}", serverInfo.server_id, meeting.topic);
                if (Interlocked.Decrement(ref consensus) == 0)
                {
                    meetingLock.Set();
                }
            }
            else
            {
                Log.Debug("{server} did not accept {meeting}", serverInfo.server_id, meeting.topic);
            }
        }
Esempio n. 3
0
        void DONTwriteMeeting(ServerInfo serverInfo, MeetingProposal meeting, List <ServerInfo> servers)
        {
            IServerToServer server = (IServerToServer)Activator.GetObject(
                typeof(IServerToServer),
                serverInfo.url_to_server);

            server.DONTwriteMeeting(meeting, servers);
        }
Esempio n. 4
0
        //ServerPuppeteer populate
        public void addOldServers(Dictionary <string, ServerInfo> serverList)
        {
            ServerInfo me = this.GetInfo();

            foreach (KeyValuePair <string, ServerInfo> pair in serverList)
            {
                //save server
                this.serverList.Add(pair.Key, pair.Value);
                //connect to server and send my info
                IServerToServer server = (ServerToServer)Activator.GetObject(
                    typeof(IServerToServer),
                    pair.Value.url_to_server);
                server.addNewServer(me);
            }
        }