SDK Version 1.2.0
AnsuR Technologies ASMIRA SDK
Loading...
Searching...
No Matches
example_complete.cpp
Go to the documentation of this file.
1#include <asmirasdk.h>
2#include <string>
3#include <thread>
4#include <chrono>
5
6#ifdef USE_STB_IMAGE_WRITE
7#define STB_IMAGE_WRITE_IMPLEMENTATION
8#include <stb_image_write.h>
9
10static void WriteImage(const char* filename, const uint8_t* data,
11 const uint32_t width, const uint32_t height)
12{
13 stbi_write_png(filename, width, height, 3, data, width * 3);
14}
15#endif
16
24
34
43
44static bool Connect(context_s& context)
45{
46#ifdef EXAMPLE_TLS
49 if (context.sdk->RequestCertificate("127.0.0.1", context.serverPort + 1, "sender", "sender", &state, &cert) == asdk::StatusOK) {
50 puts("Connecting to server...");
51 if (context.sdk->ConnectSecured("127.0.0.1", context.serverPort, false, "sender", "sender",
53 puts("Conencted to server");
54 return true;
55 }
56 else
57 puts("Failed to connect to server");
58 }
59 else
60 puts("Failed to request certificate");
61#else
62 if (context.sdk->Connect("127.0.0.1", context.serverPort, 5000, true, "test", "password",
64 puts("Conencted to server");
65 return true;
66 }
67 else
68 puts("Failed to connect to server");
69#endif
70 std::this_thread::sleep_for(std::chrono::seconds(1));
71 return false;
72}
73
74static bool RequestRooms(context_s& context)
75{
77}
78
79static bool JoinRoom(context_s& context, const char *roomName)
80{
81 return context.sdk->SendRequestStr(asdk::RequestRoomJoin, roomName) == asdk::StatusOK;
82}
83
84int main()
85{
86 context_s context;
87 context.sdk = asdk::Initialize();
88 if (context.sdk) {
89
91 void* opaque /* context* */) {
92 context_s* context = reinterpret_cast<context_s*>(opaque);
93 if ((response & asdk::AuthenticationResponseSuccess)) {
95 puts("Server authenticated your connection");
96 }
97 else {
99 printf("Server failed(%d) to authenticate your connection", response);
100 }
101 }, &context);
102
103 context.sdk->SetServerStateCallback([](const asdk::ServerState state, void* opaque /* context* */) {
104 reinterpret_cast<context_s*>(opaque)->serverState = state;
105 }, &context);
106
107 context.sdk->SetRoomAnnounceCallback([](const char* roomName, const uint32_t roomID,
108 const asdk::RoomStateValue state,
109 const asdk::RoomFlagValue flags,
110 void* opaque /* context* */) {
111 // Got first room, there may be many more
112 reinterpret_cast<context_s*>(opaque)->roomJoinedState = RoomJoinedStateReceivedList;
113 printf("Room(%s) with ID(%d) announced\n", roomName, roomID);
114 }, &context);
115
116 context.sdk->SetRoomResponseCallback([](const asdk::Request request, const asdk::RoomResponse response,
117 const void* optionalData, const uint32_t optionalDataSize,
118 void* opaque /* context* */) {
119 context_s* context = reinterpret_cast<context_s*>(opaque);
120 if (response == asdk::RoomResponseSuccess) {
122 if (optionalData && optionalDataSize == sizeof(uint16_t)) {
123 context->clientRoomID = *reinterpret_cast<const uint16_t*>(optionalData);
124 context->state = StateReady;
125 printf("Joined room and got asigned ID(%d)\n", context->clientRoomID);
126 }
127 else {
129 puts("Failed to join room");
130 }
131 }
132 else
133 printf("Failed(%d) to join room on command(%d)\n", response, request);
134
135 }, &context);
136
137 context.sdk->SetRoomClientAddedCallback([](const uint32_t clientID, const char* userName,
138 const asdk::UserCapabilityValue userCapability,
139 const asdk::DeviceCapabilityValue deviceCapability,
140 void* opaque /* context* */) {
141 printf("Client(%d) with name(%s) added to room\n", clientID, userName);
142 }, & context);
143
144 context.sdk->SetRoomClientRemovedCallback([](const uint32_t clientID, void* opaque /* context* */) {
145 printf("Client(%d) removed from room\n", clientID);
146 }, & context);
147
148 context.sdk->SetVideoModeCallback([](const asdk::video_mode_t* videoMode, void* opaque /* context* */) {
149 puts("Video mode changed");
150 }, &context);
151
152 context.sdk->SetVideoOptionsCallback([](const asdk::video_options_t* videoOptions, void* opaque /* context* */) {
153 puts("Video options changed");
154 }, &context);
155
156 context.sdk->SetFrameCallback([](const asdk::frame_t* frame, void* opaque /* context* */) {
157#ifdef USE_STB_IMAGE_WRITE
158 WriteImage("frame.png", frame->data, frame->width, frame->height);
159#endif // USE_STB_IMAGE_WRITE
160 }, &context);
161
162 context.sdk->SetEncodedStreamCallback([](const asdk::StreamType type, const void* data,
163 const uint32_t dataSize, void* opaque /* context* */) {
164 switch (type) {
171 break;
172 }
173 }, &context);
174
175 context.sdk->SetRoomPreviewImageCallback([](const uint32_t roomID, const uint64_t utc,
176 const asdk::ImageFormat imageFormat,
177 const uint8_t* data, const uint32_t size,
178 void* opaque /* context* */) {
179 printf("Room(%d) preview image received with format(%d) and size(%d)\n", roomID, imageFormat, size);
180 }, & context);
181
182 while (true) {
183 switch (context.state) {
184 case StateDisconnect:
185 context.state = StateConnect;
188 break;
189 case StateConnect:
190 if (Connect(context)) context.state = StateConnecting;
191 else context.state = StateDisconnect;
192 break;
193 case StateConnecting:
195 context.state = StateRequestRooms;
196 puts("Server authenticated your connection");
197 }
199 context.state = StateDisconnect;
200 puts("Server failed to authenticate your connection");
201 std::this_thread::sleep_for(std::chrono::seconds(5));
202 }
203 break;
205 if (RequestRooms(context)) context.state = StateRequestRoomsPending;
206 else context.state = StateDisconnect;
207 break;
210 if (JoinRoom(context, "test")) context.state = StateRequestJoinRoomPending;
211 else context.state = StateDisconnect;
212 }
213 break;
215 case StateReady:
216 break;
217 }
218 }
219 std::this_thread::sleep_for(std::chrono::milliseconds(100));
220 }
221 return 0;
222}
int main()
RoomJoinedState
@ RoomJoinedStatePending
@ RoomJoinedStateSuccess
@ RoomJoinedStateError
@ RoomJoinedStateReceivedList
@ RoomJoinedStateUndef
@ StateRequestRooms
@ StateReady
@ StateDisconnect
@ StateConnecting
@ StateConnect
@ StateRequestRoomsPending
@ StateRequestJoinRoomPending
@ RequestRoomJoin
Definition asmirasdk.h:129
@ RequestRoomListSubscribe
Definition asmirasdk.h:127
int DeviceCapabilityValue
Definition asmirasdk.h:235
CertificateState
Definition asmirasdk.h:426
uint32_t RoomStateValue
Definition asmirasdk.h:158
@ StatusOK
Definition asmirasdk.h:80
@ UserCapabilityViewer
Definition asmirasdk.h:192
uint32_t RoomFlagValue
Definition asmirasdk.h:151
AuthenticationResponse
Definition asmirasdk.h:101
@ AuthenticationResponseSuccess
Definition asmirasdk.h:103
ServerState
Definition asmirasdk.h:92
@ ServerStateAuthenticateError
Definition asmirasdk.h:97
@ ServerStateConnectedAndAuthenticated
Definition asmirasdk.h:96
@ ServerStateUndef
Definition asmirasdk.h:93
RoomResponse
Definition asmirasdk.h:133
@ RoomResponseSuccess
Definition asmirasdk.h:135
ImageFormat
Definition asmirasdk.h:177
@ DeviceCapabilityDisplay
Definition asmirasdk.h:213
@ DeviceCapabilityBasic
Definition asmirasdk.h:219
uint8_t UserCapabilityValue
Definition asmirasdk.h:197
StreamType
Definition asmirasdk.h:168
@ StreamTypeAV1Frame
Definition asmirasdk.h:172
@ StreamTypeWEBP
Definition asmirasdk.h:174
@ StreamType264Frame
Definition asmirasdk.h:170
@ StreamTypeUnknown
Definition asmirasdk.h:169
@ StreamType265Frame
Definition asmirasdk.h:171
@ StreamTypeMPEGTS
Definition asmirasdk.h:173
sdk_t * Initialize()
Definition asmirasdk.h:833
const char * data
Definition asmirasdk.h:435
int32_t height
Definition asmirasdk.h:274
uint8_t * data
Definition asmirasdk.h:278
int32_t width
Definition asmirasdk.h:273
SDK Core.
Definition asmirasdk.h:487
void SetEncodedStreamCallback(EncodedStreamFunc func, void *opaque=nullptr)
Encoded Frame or stream callback.
Definition asmirasdk.h:720
void SetRoomClientRemovedCallback(RoomClientRemovedFunc func, void *opaque=nullptr)
Server room client removed callback.
Definition asmirasdk.h:690
void SetRoomPreviewImageCallback(RoomPreviewImageFunc func, void *opaque=nullptr)
Room Preview Image callback.
Definition asmirasdk.h:780
void SetAuthenticateResponseCallback(AuthenticateResponseFunc func, void *opaque=nullptr)
SetAuthenticateResponseCallback callback.
Definition asmirasdk.h:700
Status SendRequestStr(const Request request, const char *str, const char *option=nullptr)
Sends request string to ASMIRA server.
Definition asmirasdk.h:638
void SetVideoModeCallback(VideoModeFunc func, void *opaque=nullptr)
Video Mode callback.
Definition asmirasdk.h:750
void SetFrameCallback(FrameFunc func, void *opaque=nullptr)
Video/Photo Frame callback.
Definition asmirasdk.h:710
void SetServerStateCallback(ServerStateFunc func, void *opaque=nullptr)
Server state callback.
Definition asmirasdk.h:650
void SetRoomResponseCallback(RoomResponseFunc func, void *opaque=nullptr)
Server room response callback.
Definition asmirasdk.h:670
Status SendRequest(const Request request)
Sends request to ASMIRA server.
Definition asmirasdk.h:624
Status RequestCertificate(const char *address, const uint16_t port, const char *userName, const char *password, CertificateState *certificateStateOut, certificate_t *certificateOut, const int timeout=3000)
Request certificate from ASMIRA server.
Definition asmirasdk.h:582
Status ConnectSecured(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *certificate, const char *displayName=nullptr)
Connect to ASMIRA server.
Definition asmirasdk.h:555
Status Connect(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *displayName=nullptr)
Connect to ASMIRA server.
Definition asmirasdk.h:528
void SetRoomClientAddedCallback(RoomClientAddedFunc func, void *opaque=nullptr)
Server room client added callback.
Definition asmirasdk.h:680
void SetRoomAnnounceCallback(RoomAnnounceFunc func, void *opaque=nullptr)
Server room announce callback.
Definition asmirasdk.h:660
void SetVideoOptionsCallback(VideoOptionsFunc func, void *opaque=nullptr)
Video Options callback.
Definition asmirasdk.h:740
asdk::ServerState serverState
const int serverPort
uint16_t clientRoomID
asdk::sdk_t * sdk
RoomJoinedState roomJoinedState