//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"); } }
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); } }
void DONTwriteMeeting(ServerInfo serverInfo, MeetingProposal meeting, List <ServerInfo> servers) { IServerToServer server = (IServerToServer)Activator.GetObject( typeof(IServerToServer), serverInfo.url_to_server); server.DONTwriteMeeting(meeting, servers); }
//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); } }