public CServer(string serverId, string url, int maxFaults, int minDelay, int maxDelay, string roomsFile, List <string> serverUrls = null) { SERVER_ID = serverId; SERVER_URL = url; TcpChannel serverChannel = new TcpChannel(PortExtractor.Extract(SERVER_URL)); ChannelServices.RegisterChannel(serverChannel, false); // creates the server's remote object RemotingServices.Marshal(this, SERVER_ID, typeof(CServer)); Console.WriteLine("Server created at url: {0}", SERVER_URL); RegisterRooms(roomsFile); if (serverUrls != null) { // gets other server's remote objects and saves them UpdateServers(serverUrls); } //every server will know the first on the list will be responsible _maxFaults = maxFaults; _minDelay = minDelay; _maxDelay = maxDelay; _broadcastNewMeetingDelegate = new BroadcastNewMeetingDelegate(BroadcastNewMeetingToServer); _broadcastJoinDelegate = new BroadcastJoinDelegate(BroadcastJoinToServer); _broadcastCloseDelegate = new BroadcastCloseDelegate(BroadcastCloseToServer); _broadcastDeadServersDelegate = new BroadcastDeadServersDelegate(BroadcastDeadServersToServer); _broadcastUpdateLocationDelegate = new BroadcastUpdateLocationDelegate(BroadcastUpdateLocationToServer); }
/// <summary> /// Creates TCP channel, saves relevant information for remoting, registers itself as /// remote object and gets preferred server's remote object. /// </summary> /// <param name="username"></param> /// <param name="clientUrl"></param> /// <param name="serverUrl"></param> public CClient(string username, string clientUrl, string serverUrl, List <string> backupServers, List <string> clientsUrls = null) { USERNAME = username; CLIENT_URL = clientUrl; // creates TCP channel TcpChannel clientChannel = new TcpChannel(PortExtractor.Extract(CLIENT_URL)); ChannelServices.RegisterChannel(clientChannel, false); // create the client's remote object RemotingServices.Marshal(this, username, typeof(CClient)); Console.WriteLine("Client registered with username {0} with url {1}.", username, clientUrl); RegisterNewServer(serverUrl, false); _serverStatus = new Dictionary <string, bool>(); foreach (string backup in backupServers) { _serverStatus.Add(backup, false); } _clients = new ConcurrentDictionary <string, IClient>(); _knownClientUrls = new List <string>(); _knownMeetingProposals = new Dictionary <string, MeetingProposal>(); // gets other client's remote objects and saves them if (clientsUrls != null) { UpdateClients(clientsUrls); } }