示例#1
0
 //----------------------------------------------------------------
 private IDataRoomServer GetRoomServer(CDataRoom room)
 {
     if (room == null)
     {
         return(this);
     }
     if (room.Id == RoomId)
     {
         return(this);
     }
     return(Activator.CreateInstance(typeof(IDataRoomServer), GetRoomConnexionString(room)) as IDataRoomServer);
 }
示例#2
0
        //----------------------------------------------------------------
        public CResultAErreur SendData(string strIdTable, string strIdChamp, string strIdEntite, DateTime dataDate, double fValue)
        {
            CResultAErreur result = CResultAErreur.True;
            CDataRoom      room   = CDataDispatch.GetRoomFor(strIdEntite, m_database);

            try
            {
                IDataRoomServer srv = GetRoomServer(room);
                if (srv != null)
                {
                    result = srv.SendDataDirect(strIdTable, strIdChamp, strIdEntite, dataDate, fValue);
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }


            return(result);
        }
示例#3
0
        //----------------------------------------------------------------
        public CResultAErreurType <CDataTableFastSerialize> GetData(CDataHotelQuery query)
        {
            //Explose la requête pour chaque serveur de destination
            Dictionary <CDataRoom, CDataHotelQuery> dicRoomToQuery = new Dictionary <CDataRoom, CDataHotelQuery>();
            CListeEntitesDeMemoryDb <CDataRoom>     allRooms       = new CListeEntitesDeMemoryDb <CDataRoom>(m_database);

            foreach (string strIdEntite in query.EntitiesId)
            {
                //Si le dispatch ne sait pas qui interroger, on interroge tout le monde !
                CDataRoom        room     = CDataDispatch.GetRoomFor(strIdEntite, m_database);
                List <CDataRoom> lstToAsk = new List <CDataRoom>();
                if (room != null)
                {
                    lstToAsk.Add(room);
                }
                else
                {
                    lstToAsk.AddRange(allRooms);
                }
                foreach (CDataRoom roomToAsk in lstToAsk)
                {
                    CDataHotelQuery specQuery = null;
                    if (!dicRoomToQuery.TryGetValue(roomToAsk, out specQuery))
                    {
                        specQuery = query.Clone(false);
                        dicRoomToQuery[roomToAsk] = specQuery;
                    }
                    specQuery.EntitiesId.Add(strIdEntite);
                }
            }
            CResultAErreurType <CDataTableFastSerialize> myResult = new CResultAErreurType <CDataTableFastSerialize>();
            DataTable tableResult = new DataTable();

            foreach (KeyValuePair <CDataRoom, CDataHotelQuery> kv in dicRoomToQuery)
            {
                CDataRoom room = kv.Key;
                CResultAErreurType <CDataTableFastSerialize> res = new CResultAErreurType <CDataTableFastSerialize>();
                IDataRoomServer srv = GetRoomServer(room);
                if (srv != null)
                {
                    res = srv.GetDataDirect(kv.Value);
                    if (res && res.DataType != null)
                    {
                        DataTable tableTmp = res.DataType;
                        tableResult.Merge(tableTmp);
                    }
                }
            }
            //S'assure que la table résultat contient bien toutes les colonnes demandées
            foreach (string strIdCol in query.ChampsId)
            {
                if (tableResult.Columns[strIdCol] == null)
                {
                    tableResult.Columns.Add(strIdCol, typeof(double));
                }
            }
            tableResult.DefaultView.Sort = CDataHotelTable.c_nomChampTableDate + "," + CDataHotelTable.c_nomChampTableEntiteId;
            DataTable tableFinale = tableResult.Clone();

            tableFinale.BeginLoadData();
            foreach (DataRowView rv in tableResult.DefaultView)
            {
                DataRow row = tableFinale.NewRow();

                foreach (DataColumn col in tableFinale.Columns)
                {
                    row[col.ColumnName] = rv[col.ColumnName];
                }
                tableFinale.Rows.Add(row);
            }
            tableFinale.EndLoadData();
            tableResult = tableFinale;
            foreach (IChampHotelCalcule champCalcule in query.ChampsCalcules)
            {
                champCalcule.FinaliseCalcul(
                    query.TableId,
                    tableResult,
                    this,
                    query.DateDebut,
                    query.DateFin);
            }

            myResult.DataType = tableResult;
            return(myResult);
        }
示例#4
0
 //----------------------------------------------------------------
 private string GetRoomConnexionString(CDataRoom room)
 {
     return("tcp://" + room.RoomIp + ":" + room.RoomPort);
 }