source: trunk/XSUC/Connections.cpp

Last change on this file was 11, checked in by marrucho, 11 years ago
File size: 2.2 KB
Line 
1// Connections.cpp: implementation of the CConnections class.
2//
3//////////////////////////////////////////////////////////////////////
4
5#include "stdafx.h"
6#include "Connections.h"
7
8#ifdef _DEBUG
9#undef THIS_FILE
10static char THIS_FILE[]=__FILE__;
11#define new DEBUG_NEW
12#endif
13
14
15IMPLEMENT_DYNAMIC( CConnections , CObject)
16
17
18//////////////////////////////////////////////////////////////////////
19// Construction/Destruction
20//////////////////////////////////////////////////////////////////////
21
22CConnections::CConnections()
23{
24
25}
26
27CConnections::~CConnections()
28{
29        RemoveAll();
30}
31
32CConnection* CConnections::Add(LPCTSTR sKey, WORD wType)
33{
34
35        CConnection* pConnection=NULL;
36
37        if (Lookup(sKey,pConnection)) {
38
39                ASSERT(FALSE);
40                return NULL;
41
42        }
43
44        pConnection = new CConnection(wType,sKey);
45
46        SetAt(sKey,pConnection);
47
48        return pConnection;
49}
50
51void CConnections::Remove(LPCTSTR sKey)
52{
53        CConnection* pConnection =NULL;
54       
55        if (Lookup(sKey,pConnection)) {
56
57                pConnection->Delete();
58
59                if (!RemoveKey(sKey)) {
60                                ASSERT(FALSE);
61                        }
62       
63        }
64
65
66}
67
68void CConnections::RemoveAll()
69{
70
71        POSITION pos;
72        CString sKey;
73        pos = GetStartPosition();
74        CConnection* pConnection;
75       
76        while (NULL!=pos) {
77                GetNextAssoc(pos,sKey,pConnection);
78                Remove(sKey);
79                pos = GetStartPosition();
80        }
81
82}
83
84void CConnections::Serialize( CArchive& archive )
85{
86        int iCount=0;
87        POSITION pos;
88        CString sKey;
89        CConnection* pConnection;
90        WORD wType;
91        int i=0;
92       
93        // call base class function first
94        // base class is CObject in this case
95        CObject::Serialize( archive );
96       
97       
98        // now do the stuff for our specific class
99        if( archive.IsStoring() ){
100                iCount=GetCount();
101                archive <<iCount;
102               
103                pos = GetStartPosition();
104               
105                while (NULL!=pos) {
106                        GetNextAssoc(pos,sKey,pConnection);
107                        //Serialize each connection
108                        archive <<sKey<< pConnection->Type();
109                        pConnection->Serialize(archive);
110                }
111               
112        } 
113       
114        else {
115                archive >>iCount;
116               
117                for (i=0;i<iCount;i++){
118                        archive >>sKey>>wType;
119                        pConnection= Add(sKey,wType);
120                        pConnection->Serialize(archive);
121                        if (CConnection::AUTO==pConnection->Type()) {
122                                if (!pConnection->AutoPtr()->m_pIModbusSrv) {
123                                        Remove(sKey);
124                                }
125                        }
126                       
127                }
128        }
129       
130}
Note: See TracBrowser for help on using the repository browser.