Ejemplo n.º 1
0
        protected override void OnStart(string[] args)
        {
            // log
            ErrorLogger.Log(ErrorLogger.LogType.OUTBOUND_SERVICE_STARTING, DateTime.Now.ToString());

            // get all configuration data
            List <Configuration> configs = ConfigurationDAO.GetApplications();

            // get the master configuration
            Configuration masterConfig = ConfigurationDAO.GetAllConfigurations();

            // gets the outgoing webservice configuration only
            List <Configuration> applications = ConfigurationUtility.GetIncomingWebservice(configs);

            applications.ForEach(delegate(Configuration appConfig) {
                OutboundHandler outboundHandler = new OutboundHandler();
                string appName = appConfig.application.name;

                // set the app name
                outboundHandler.setApplicationName(appName);

                // set the master config
                outboundHandler.setMasterConfiguration(masterConfig);

                // set the static worker
                outboundHandler.setProcessingWorker(OutboundHandlerDAO.handleProcessingForOutboundHandler);

                // add to queue and run
                ThreadPool.QueueUserWorkItem(new WaitCallback(startOutboundProcessing), outboundHandler);
            });
        }
Ejemplo n.º 2
0
        private void startInterface(object state)
        {
            try
            {
                // create new configuration to get all configurations
                Configuration masterConfiguration = new Configuration();

                // get all configurations
                masterConfiguration = ConfigurationDAO.GetAllConfigurations();

                // pass configuration by reference, re-allocated the boject
                Configuration intConfig = (Configuration)state;

                // get the interface communication
                Communication incomingCommunication = intConfig.communication;

                // get the database communication from the list
                Communication outgoingCommunication = intConfig.communications[0];

                // create new socket
                Socket socket = new Socket(intConfig.interfaceThread.ipAddress,
                                           intConfig.interfaceThread.port,
                                           intConfig.interfaceThread.maxConnections,
                                           incomingCommunication,
                                           outgoingCommunication);


                // set the master configuration
                socket.masterConfiguration = masterConfiguration;

                // set the incoming handler, [Coming to the Service]
                socket.setIncomingMessageHandler(SocketDAO.handleIncomingHL7MessageToBroker);

                // set the outgoing handler, [Leaving Service]
                socket.setOutgoingMessageHandler(SocketDAO.handleOutgoingHL7MessageToBroker);

                // add the socket to the dictionary so we can access it from OnStop()
                this.socketDictionary.Add(intConfig.communication.id, socket);

                // begin listening on the socket
                socket.Start();
            }
            catch (Exception ex)
            {
                ErrorLogger.LogError(ex, "OnStart()", "See windows event log for details");
            }
        }
        private static bool copyOutgoingDatabase(Application inFromApplication,
                                                 Application inToApplication,
                                                 string directionType,
                                                 string communicationType)
        {
            try
            {
                int toApplicationIdentity   = inFromApplication.id;
                int fromApplicationIdentity = inToApplication.id;
                // get all applications
                List <Configuration> applicationList = ConfigurationDAO.GetApplications(new Application()
                {
                    id = fromApplicationIdentity
                });

                // get all communuication and direction Types
                Configuration masterConfigration = ConfigurationDAO.GetAllConfigurations();

                // get the specific application direction and comm you want
                Configuration fromApplication = applicationList.Find(a => a.communicationType.name == communicationType &&
                                                                     a.directionType.name == directionType);


                // communication translation identities
                int toDirectionTypeId =
                    masterConfigration.directionTypes.Find(d => d.name == fromApplication.directionType.name).id;
                int toCommunicationTypeId =
                    masterConfigration.communicationTypes.Find(c => c.name == fromApplication.communicationType.name).id;

                // create a new application object with your current application identity
                Application toApplication = new Application()
                {
                    id = toApplicationIdentity
                };

                // insert a new communication with your exsisting application
                Communication toCommunication =
                    CommunicationDAO.PostUpdate(new Communication()
                {
                    applicationId       = toApplication.id,
                    communicationTypeId = toCommunicationTypeId,
                    directionTypeId     = toDirectionTypeId
                });


                // get the database_instance information (credential id, name, server, ip) of the communication identity.
                DatabaseInstance fromDatabaseInstance =
                    masterConfigration.databaseInstances.Find(i => i.communicationId == fromApplication.communication.id);

                // get database_instance id of the copy from insert into new database_instance with info prior step
                DatabaseInstance toDatabaseInstance = new DatabaseInstance();

                // copy individual values as not top copy the reference (we need it later)
                toDatabaseInstance = fromDatabaseInstance.ShallowCopy();

                // override the communication id w/ the "to" communication id
                toDatabaseInstance.id = 0;
                toDatabaseInstance.communicationId = toCommunication.id;
                // insert new database instance - get the id from this request
                toDatabaseInstance = DatabaseInstanceDAO.PostUpdate(toDatabaseInstance);

                // get all database tables from the fromDatabaseInstance
                List <Configuration> fromDatabaseTables = ConfigurationDAO.GetDatabaseTables(fromDatabaseInstance);

                // get the database table relations
                List <DatabaseTableRelation> databaseTableRelations = masterConfigration.databaseTableRelations;

                // create a new database relation object
                DatabaseTableRelation databaseTableRelation = new DatabaseTableRelation()
                {
                    id = 0,
                    requiresIdentity      = true,
                    sourceDatabaseTableId = -1,
                    targetDatabaseTableId = -1
                };

                // foreach table that belongs to the from database_instance, get the from database_table information
                fromDatabaseTables.ForEach(delegate(Configuration configurationTable)
                {
                    // extract the database table from the configuration
                    DatabaseTable fromDatabaseTable = new DatabaseTable()
                    {
                        id = configurationTable.databaseTable.id,
                        databaseInstanceId = fromDatabaseInstance.id,
                        name = configurationTable.databaseTable.name
                    };

                    // create new database table
                    DatabaseTable toDatabaseTable = new DatabaseTable()
                    {
                        databaseInstanceId = toDatabaseInstance.id,
                        name = fromDatabaseTable.name
                    };

                    // insert new table into database_table with fromDatabaseTable information but use toDatabaseInstanceId
                    toDatabaseTable = DatabaseTableDAO.PostUpdate(toDatabaseTable);

                    // check for prior source relation
                    if (ConfigurationUtility.IsDatabaseTableRelation(configurationTable.databaseTable, databaseTableRelations))
                    {
                        databaseTableRelation.sourceDatabaseTableId = toDatabaseTable.id;
                    }

                    // check for prior target relation
                    if (ConfigurationUtility.IsDatabaseTableRelation(configurationTable.databaseTable, databaseTableRelations, true))
                    {
                        databaseTableRelation.targetDatabaseTableId = toDatabaseTable.id;
                    }

                    // based on the fromDatabaseTable get all column sets
                    List <Configuration> fromColumnSets = ConfigurationDAO.GetDatabaseColumns(fromDatabaseTable);

                    // foreach columnset that belongs to fromDatabaseColumn copy all information (except for the fromDatabaseTableId)
                    fromColumnSets.ForEach(delegate(Configuration configurationColumnSet)
                    {
                        // define the column set
                        ColumnSet fromColumnSet = new ColumnSet();
                        ColumnSet toColumnSet   = new ColumnSet();

                        // get the column set from the configuration list
                        fromColumnSet = configurationColumnSet.columnSet;
                        fromColumnSet.databaseTableId = configurationColumnSet.databaseTable.id;

                        // do a shallow copy of its properties and override the ones you need
                        toColumnSet    = fromColumnSet.ShallowCopy();
                        toColumnSet.id = 0;
                        toColumnSet.databaseTableId = toDatabaseTable.id;

                        // insert new toColumnSet using new toDAtabaseTable.id
                        toColumnSet = ColumnSetDAO.PostUpdate(toColumnSet);
                    });
                });

                // if relation source or target is not negative one - insert new relation
                if (databaseTableRelation.sourceDatabaseTableId != -1 &&
                    databaseTableRelation.targetDatabaseTableId != -1)
                {
                    databaseTableRelation = DatabaseTableRelationDAO.PostUpdate(databaseTableRelation);
                }
            }
            catch (Exception ex)
            {
                string fromApplicationId = inFromApplication.id.ToString();
                string toApplicationId   = inToApplication.id.ToString();
                ErrorLogger.LogError(ex,
                                     "CopyConfigurationUtility.CopyOutgoingDatabase(fromApplication, toApplication, directionType,communicationType)",
                                     fromApplicationId + "|" +
                                     toApplicationId + "|" +
                                     directionType + "|" +
                                     communicationType);

                return(false);
            }

            return(true);
        }
Ejemplo n.º 4
0
        public static void TestConfigLoad()
        {
            Configuration masterConfig = ConfigurationDAO.GetAllConfigurations();

            List <Application>           applications         = masterConfig.applications;
            List <Communication>         communications       = masterConfig.communications;
            List <WebserviceObject>      webserviceObjects    = masterConfig.webserviceObjects;
            List <WebserviceInstance>    webserviceInstances  = masterConfig.webserviceInstances;
            List <WebservicePropertySet> webserviceProperties = masterConfig.webservicePropertySets;
            List <MessageGroup>          messageGroups        = masterConfig.messageGroups;

            applications.ForEach(delegate(Application app)
            {
                if (app.name != RSERVER)
                {
                    return;
                }

                // get the unprocessed message count for the application
                List <MessageBucket> brokerInformation
                    = MessageBucketDAO.GetUnprocessedMessageHeaderInstancesByApplication(app);

                brokerInformation.ForEach(delegate(MessageBucket broker)
                {
                    // get the message header and message
                    MessageHeaderInstance messageHeaderInstance = broker.messageHeaderInstance;
                    Message message = broker.message;

                    // locally retrieve the communication object from memory
                    Communication communication
                        = ConfigurationUtility.GetIncomingWebserviceCommunication(app, communications);
                    // locally retrieve the webservice instance object from memory
                    WebserviceInstance webserviceInstance
                        = ConfigurationUtility.GetIncomingWebserviceInstance(communication, webserviceInstances);
                    // locally retrieve the web service objects from memory
                    List <WebserviceObject> wsObjects
                        = ConfigurationUtility.GetIncomingWebserviceObjects(webserviceInstance, webserviceObjects);

                    // for each object - for each property set for that object - handle accordingly
                    wsObjects.ForEach(delegate(WebserviceObject wsObject)
                    {
                        Console.WriteLine("OBJECT:" + wsObject.name);

                        List <WebservicePropertySet> wsProperties
                            = ConfigurationUtility.GetIncomingWebservicePropertySets(wsObject, webserviceProperties);

                        wsProperties.ForEach(delegate(WebservicePropertySet wsProperty)
                        {
                            Console.WriteLine("Property:" + wsProperty.name);

                            List <MessageGroup> msGroups
                                = ConfigurationUtility.GetIncomingWebserviceMessageGroup(wsProperty, messageGroups);

                            Console.WriteLine("Group Count:" + msGroups.Count);
                        });
                    });
                    // update the table to processed
                    // BrokerDAO.UpdateProcessedFlagAndMessageLog(messageHeaderInstance, message, true);
                });
            });
        }