private void CreateProposal(StatusNotifyMessage message) { if (message.status == PeerStatus.Consumer) { if (_peerStatus == PeerStatus.Producer) { XMLLogger.WriteLocalActivity(message.energyReq + "kW Energy Request Received from: " + message.header.Sender); float enAvailable = getEnergyLevel() - (_enPeak + _enSold); if (enAvailable > 0) { float enSold = enAvailable >= message.energyReq ? message.energyReq : enAvailable; EnergyProposalMessage respMessage = MessageFactory.createEnergyProposalMessage( message.header.MessageID, message.header.Sender, _name, enSold, _price ); Connector.channel.energyProposal(respMessage); XMLLogger.WriteLocalActivity(enSold + "kW Energy Proposal Sent to: " + message.header.Sender); } } } }
private void ForwardEnergyRequest(StatusNotifyMessage message) { XMLLogger.WriteRemoteActivity("Forwarding " + message.energyReq + "kW Energy Request from: " + message.header.Sender); XMLLogger.WriteRemoteActivity("MessageID: " + message.header.MessageID); _requestThread = new Thread(new ParameterizedThreadStart(ConnectToRemoteHost)); _requestThread.Start(message); }
//public void EnergyLookUp(object m) public void EnergyLookUp(StatusNotifyMessage message) { //StatusNotifyMessage message = (StatusNotifyMessage)m; _sem.Wait(); _originPeerName = message.header.Sender; _enLookUp = message.energyReq; _originGuid = message.header.MessageID; message.header.Sender = this._name; XMLLogger.WriteRemoteActivity("Broker is serving: " + message.header.MessageID + " session."); Connector.channel.statusAdv(message); _proposalCountdown.Enabled = true; }
private void ConnectToRemoteHost(object m) { bool connected = false; StatusNotifyMessage message = (StatusNotifyMessage)m; _remoteResolvers = Tools.getRemoteHosts(); while (connected == false && _nHostIndex < _remoteResolvers.Count) { lock (_counterLock) { //localhost connections filter if (_remoteResolvers[_nHostIndex].IP == "127.0.0.1" || _remoteResolvers[_nHostIndex].IP.ToLower() == "localhost") { if (_nHostIndex < (_remoteResolvers.Count - 1)) { _nHostIndex++; } else { _nHostIndex = 0; } continue; } XMLLogger.WriteRemoteActivity("Connecting to " + _remoteResolvers[_nHostIndex].IP); NetTcpBinding tcpBinding = new NetTcpBinding(); EndpointAddress remoteEndpoint = new EndpointAddress(_remoteResolvers[_nHostIndex].netAddress); tcpBinding.Security.Mode = SecurityMode.None; ChannelFactory <IRemote> cf = new ChannelFactory <IRemote>(tcpBinding, remoteEndpoint); _remoteChannel = cf.CreateChannel(); try { _remoteChannel.Open(); //Retrieve Remote IP Addresses foreach (var newRemote in _remoteChannel.RetrieveContactList()) { if (!_remoteResolvers.Exists(delegate(RemoteHost x) { return(x.netAddress == newRemote.netAddress); })) { _remoteResolvers.Add(newRemote); Tools.updateRemoteHosts(newRemote); } } XMLLogger.WriteRemoteActivity("Connected to: " + _remoteResolvers[_nHostIndex].IP); XMLLogger.WriteRemoteActivity("Forwarding Energy Request from: " + message.header.Sender + "To: " + _remoteResolvers[_nHostIndex]); XMLLogger.WriteRemoteActivity("Message ID: " + message.header.MessageID); _remoteChannel.ManageRemoteEnergyRequest(MessageFactory.createRemoteEnergyRequestMessage(message, _remoteResolvers[_nHostIndex].name, this.name, Tools.getLocalIP(), Tools.getResolverServicePort() )); this.isRemoteConnected = true; connected = true; } catch (Exception e) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Unable to connect to remote host."); //XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), e.ToString()); //For debug purpose _nHostIndex++; if (_nHostIndex >= _remoteResolvers.Count) { _nHostIndex = 0; _remoteChannel.Abort(); } connected = false; } } } if (_nHostIndex >= _remoteResolvers.Count) { lock (_counterLock) { _nHostIndex = 0; } } }