private bool StartRemoteService() { bool bRet = false; _remoteMessageHandler = new PeerServices(); _remoteHost = new ServiceHost(_remoteMessageHandler); //To handle the remote traffic _remoteMessageHandler.OnRemoteEnergyRequest += new manageEnergyRequest(ManageRemoteEnergyRequest); _remoteMessageHandler.OnRemoteEnergyReply += new replyEnergyRequest(ManageRemoteEnergyReply); _remoteMessageHandler.OnRemotePeerIsDown += new remotePeerIsDown(RemotePeerIsDown); try { _remoteHost.Open(); bRet = true; XMLLogger.WriteRemoteActivity("Remote service started."); } catch (Exception e) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Unable to start Remote Service."); //XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), e.ToString()); //For debug purpose _remoteHost.Abort(); } return(bRet); }
public void CloseService() { XMLLogger.WriteLocalActivity("Closing Application..."); _GarbageCollectorTimer.Enabled = false; try { if (this.isRemoteServiceStarted == true) { _remoteHost.Close(); } if (this.isRemoteConnected == true) { _remoteChannel.Close(); } if (this.isLocalConnected == true) { _crs.Close(); _customResolver.Close(); } StopService(); //Calls the base.StopService method } catch (Exception e) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "App Fault on Exit"); } }
private bool StartLocalResolver() { bool bRet = false; _customResolver = new ServiceHost(_crs); XMLLogger.WriteLocalActivity("Starting Custom Local Peer Resolver Service..."); try { _crs.Open(); _customResolver.Open(); bRet = true; XMLLogger.WriteLocalActivity("Custom Local Peer Resolver Service is started"); } catch (Exception e) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Error in starting Custom Local Peer Resolver Service"); XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), e.ToString()); _crs.Close(); _customResolver.Abort(); bRet = false; } return(bRet); }
public static bool Connect() { messageHandler = new MessageHandler(); //create channel //InstanceContext represents the running instance of the service. //OperationContext is the instance of the client accessing the service. InstanceContext instanceContext = new InstanceContext(messageHandler); _factory = new DuplexChannelFactory <IChannel>(instanceContext, "GridEndpoint"); channel = _factory.CreateChannel(); try { ((ICommunicationObject)channel).Open(); } catch (CommunicationException e) { ((ICommunicationObject)channel).Abort(); _factory.Abort(); XMLLogger.WriteErrorMessage("Connector", "Could not find resolver. If you are using a custom resolver, please ensure that the service is running."); XMLLogger.WriteErrorMessage("Connector", "System Error: " + e.ToString()); return(false); } return(true); }
public void StartService() { if (Connector.Connect()) { this.isConnected = true; XMLLogger.WriteLocalActivity("OnLine."); } else { this.isConnected = false; XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Connection Error"); } }
private void removeBuildingByName(string name) { string leavingPeer = name; XMLLogger.WriteLocalActivity("Peer: " + leavingPeer + " is down!"); //Remove the deadly peer but first alert the folks. Connector.channel.peerDown(MessageFactory.createPeerIsDownMessage("@All", this.name, leavingPeer)); lock (_connectionLock) { //Alert Remote Resolvers foreach (var remConn in _remoteConnections) { NetTcpBinding tcpBinding = new NetTcpBinding(); EndpointAddress remoteEndpoint = new EndpointAddress(remConn.remoteResolver.netAddress); tcpBinding.Security.Mode = SecurityMode.None; ChannelFactory <IRemote> cf = new ChannelFactory <IRemote>(tcpBinding, remoteEndpoint); IRemote tChannel = cf.CreateChannel(); try { tChannel.PeerDownAlert(MessageFactory.createPeerIsDownMessage("@All", this.name, leavingPeer)); } catch (Exception ex) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Error in sending Remote Peer Alert Message" + ex.ToString()); } } } updateLocalConnectionsList(leavingPeer); var itemToRemove = from b in _buildings where b.Name == leavingPeer select b; lock (_lLock) { if (itemToRemove.Count() > 0) { _buildings.Remove(itemToRemove.First()); } } }
void ForwardEnergyReply(EndProposalMessage message) { RemoteConnection conn = GetConnectionByMessageID(message.header.MessageID, ConnectionType.Incoming); XMLLogger.WriteRemoteActivity("Forwarding Remote Response about message: " + message.header.MessageID + " Status = " + message.endStatus); XMLLogger.WriteRemoteActivity("Message ID: " + message.header.MessageID); if (conn != null) { //Header re-handling conn.requests[message.header.MessageID].localePeerName = message.header.Sender; conn.requests[message.header.MessageID].energy = message.energy; message.header.Receiver = conn.requests[message.header.MessageID].remotePeerName; #region Creating Channel NetTcpBinding tcpBinding = new NetTcpBinding(); EndpointAddress remoteEndpoint = new EndpointAddress(conn.remoteResolver.netAddress); tcpBinding.Security.Mode = SecurityMode.None; ChannelFactory <IRemote> cf = new ChannelFactory <IRemote>(tcpBinding, remoteEndpoint); IRemote tChannel = cf.CreateChannel(); #endregion RemoteEndProposalMessage remoteEndMessage = (MessageFactory.createRemoteEndProposalMessage(message, conn.remoteResolver.name, this.name, Tools.getLocalIP(), Tools.getResolverServicePort())); try { tChannel.ReplyEnergyRequest(remoteEndMessage); } catch (Exception e) { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Error in Forwarding Energy Reply Message: " + e.ToString()); } } else { XMLLogger.WriteErrorMessage(this.GetType().FullName.ToString(), "Could not find the following message: " + message.header.MessageID); } }
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; } } }