25
25
26
26
constexpr size_t kMaxNumberOfEndpoints = 5 ;
27
27
28
+ class TargetVideoPlayerInfo ;
29
+ class VideoPlayerConnectionContext
30
+ {
31
+ public:
32
+ VideoPlayerConnectionContext (TargetVideoPlayerInfo * targetVideoPlayerInfo, chip::OnDeviceConnected handleDeviceConnected,
33
+ chip::OnDeviceConnectionFailure handleConnectionFailure,
34
+ std::function<void (TargetVideoPlayerInfo *)> onConnectionSuccess,
35
+ std::function<void (CHIP_ERROR)> onConnectionFailure)
36
+ {
37
+ mTargetVideoPlayerInfo = targetVideoPlayerInfo;
38
+ mOnConnectedCallback = new chip::Callback::Callback<chip::OnDeviceConnected>(handleDeviceConnected, this );
39
+ mOnConnectionFailureCallback = new chip::Callback::Callback<chip::OnDeviceConnectionFailure>(handleConnectionFailure, this );
40
+ mOnConnectionSuccessClientCallback = onConnectionSuccess;
41
+ mOnConnectionFailureClientCallback = onConnectionFailure;
42
+ }
43
+
44
+ ~VideoPlayerConnectionContext ()
45
+ {
46
+ if (mOnConnectedCallback != nullptr )
47
+ {
48
+ delete mOnConnectedCallback ;
49
+ }
50
+
51
+ if (mOnConnectionFailureCallback != nullptr )
52
+ {
53
+ delete mOnConnectionFailureCallback ;
54
+ }
55
+ }
56
+
57
+ TargetVideoPlayerInfo * mTargetVideoPlayerInfo ;
58
+ chip::Callback::Callback<chip::OnDeviceConnected> * mOnConnectedCallback = nullptr ;
59
+ chip::Callback::Callback<chip::OnDeviceConnectionFailure> * mOnConnectionFailureCallback = nullptr ;
60
+ std::function<void (TargetVideoPlayerInfo *)> mOnConnectionSuccessClientCallback = {};
61
+ std::function<void (CHIP_ERROR)> mOnConnectionFailureClientCallback = {};
62
+ };
63
+
28
64
class TargetVideoPlayerInfo
29
65
{
30
66
public:
31
- TargetVideoPlayerInfo () :
32
- mOnConnectedCallback (HandleDeviceConnected, this ), mOnConnectionFailureCallback (HandleDeviceConnectionFailure, this )
33
- {}
67
+ TargetVideoPlayerInfo () {}
34
68
35
69
bool operator ==(const TargetVideoPlayerInfo & other) { return this ->mNodeId == other.mNodeId ; }
36
70
@@ -49,9 +83,9 @@ class TargetVideoPlayerInfo
49
83
50
84
chip::OperationalDeviceProxy * GetOperationalDeviceProxy ()
51
85
{
52
- if (mDeviceProxy . ConnectionReady ())
86
+ if (mDeviceProxy != nullptr && mDeviceProxy -> ConnectionReady ())
53
87
{
54
- return & mDeviceProxy ;
88
+ return mDeviceProxy ;
55
89
}
56
90
return nullptr ;
57
91
}
@@ -73,19 +107,33 @@ class TargetVideoPlayerInfo
73
107
static void HandleDeviceConnected (void * context, chip::Messaging::ExchangeManager & exchangeMgr,
74
108
const chip::SessionHandle & sessionHandle)
75
109
{
76
- TargetVideoPlayerInfo * _this = static_cast <TargetVideoPlayerInfo *>(context);
77
- _this->mDeviceProxy = chip::OperationalDeviceProxy (&exchangeMgr, sessionHandle);
78
- _this->mInitialized = true ;
110
+ ChipLogProgress (AppServer, " tmplog: HandleDeviceConnected called" );
111
+ VideoPlayerConnectionContext * connectionContext = static_cast <VideoPlayerConnectionContext *>(context);
112
+ if (connectionContext == nullptr || connectionContext->mTargetVideoPlayerInfo == nullptr )
113
+ {
114
+ ChipLogError (AppServer, " HandleDeviceConnected called with null context or null context.targetVideoPlayerInfo" );
115
+ return ;
116
+ }
117
+ if (connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy != nullptr )
118
+ {
119
+ ChipLogProgress (AppServer, " HandleDeviceConnected deleting mDeviceProxy" );
120
+ delete connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy ;
121
+ ChipLogProgress (AppServer, " HandleDeviceConnected deleted mDeviceProxy" );
122
+ }
123
+ connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy = new chip::OperationalDeviceProxy (&exchangeMgr, sessionHandle);
124
+ connectionContext->mTargetVideoPlayerInfo ->mInitialized = true ;
79
125
ChipLogProgress (AppServer,
80
126
" HandleDeviceConnected created an instance of OperationalDeviceProxy for nodeId: 0x" ChipLogFormatX64
81
127
" , fabricIndex: %d" ,
82
- ChipLogValueX64 (_this->GetNodeId ()), _this->GetFabricIndex ());
128
+ ChipLogValueX64 (connectionContext->mTargetVideoPlayerInfo ->GetNodeId ()),
129
+ connectionContext->mTargetVideoPlayerInfo ->GetFabricIndex ());
83
130
84
- if (_this ->mOnConnectionSuccessClientCallback )
131
+ if (connectionContext ->mOnConnectionSuccessClientCallback )
85
132
{
86
133
ChipLogProgress (AppServer, " HandleDeviceConnected calling mOnConnectionSuccessClientCallback" );
87
- _this ->mOnConnectionSuccessClientCallback (_this );
134
+ connectionContext ->mOnConnectionSuccessClientCallback (connectionContext-> mTargetVideoPlayerInfo );
88
135
}
136
+ delete connectionContext;
89
137
}
90
138
91
139
static void HandleDeviceConnectionFailure (void * context, const chip::ScopedNodeId & peerId, CHIP_ERROR error)
@@ -94,31 +142,35 @@ class TargetVideoPlayerInfo
94
142
" HandleDeviceConnectionFailure called for peerId.nodeId: 0x" ChipLogFormatX64
95
143
" , peer.fabricIndex: %d with error: %" CHIP_ERROR_FORMAT,
96
144
ChipLogValueX64 (peerId.GetNodeId ()), peerId.GetFabricIndex (), error.Format ());
97
- TargetVideoPlayerInfo * _this = static_cast <TargetVideoPlayerInfo *>(context);
98
- _this->mDeviceProxy = chip::OperationalDeviceProxy ();
99
- if (_this->mOnConnectionFailureClientCallback )
145
+ VideoPlayerConnectionContext * connectionContext = static_cast <VideoPlayerConnectionContext *>(context);
146
+ if (connectionContext == nullptr || connectionContext->mTargetVideoPlayerInfo == nullptr )
147
+ {
148
+ ChipLogError (AppServer, " HandleDeviceConnectionFailure called with null context" );
149
+ return ;
150
+ }
151
+ if (connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy != nullptr )
152
+ {
153
+ delete connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy ;
154
+ }
155
+ connectionContext->mTargetVideoPlayerInfo ->mDeviceProxy = new chip::OperationalDeviceProxy ();
156
+ if (connectionContext->mOnConnectionFailureClientCallback )
100
157
{
101
158
ChipLogProgress (AppServer, " HandleDeviceConnectionFailure calling mOnConnectionFailureClientCallback" );
102
- _this ->mOnConnectionFailureClientCallback (error);
159
+ connectionContext ->mOnConnectionFailureClientCallback (error);
103
160
}
161
+ delete connectionContext;
104
162
}
105
163
106
164
TargetEndpointInfo mEndpoints [kMaxNumberOfEndpoints ];
107
165
chip::NodeId mNodeId ;
108
166
chip::FabricIndex mFabricIndex ;
109
- chip::OperationalDeviceProxy mDeviceProxy ;
167
+ chip::OperationalDeviceProxy * mDeviceProxy = nullptr ;
110
168
uint16_t mVendorId = 0 ;
111
169
uint16_t mProductId = 0 ;
112
170
chip::DeviceTypeId mDeviceType = 0 ;
113
171
char mDeviceName [chip::Dnssd::kMaxDeviceNameLen + 1 ] = {};
114
172
char mHostName [chip::Dnssd::kHostNameMaxLength + 1 ] = {};
115
173
size_t mNumIPs = 0 ; // number of valid IP addresses
116
174
chip::Inet::IPAddress mIpAddress [chip::Dnssd::CommonResolutionData::kMaxIPAddresses ];
117
-
118
- chip::Callback::Callback<chip::OnDeviceConnected> mOnConnectedCallback ;
119
- chip::Callback::Callback<chip::OnDeviceConnectionFailure> mOnConnectionFailureCallback ;
120
- std::function<void (TargetVideoPlayerInfo *)> mOnConnectionSuccessClientCallback ;
121
- std::function<void (CHIP_ERROR)> mOnConnectionFailureClientCallback ;
122
-
123
175
bool mInitialized = false ;
124
176
};
0 commit comments