コード例 #1
0
ファイル: CServer.cs プロジェクト: danielaLopes/PADI
        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);
        }
コード例 #2
0
ファイル: CClient.cs プロジェクト: danielaLopes/PADI
        /// <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);
            }
        }