MCPcopy Create free account
hub / github.com/MonaSolutions/MonaServer / start

Method start

MonaServer/sources/Servers.cpp:47–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45}
46
47void Servers::start(const Parameters& parameters) {
48 if (_running)
49 stop();
50
51 _running = true;
52
53 onServerHello = [this,&parameters](ServerConnection& server) {
54 if (!_connections.emplace(&server).second) {
55 ERROR("Server ", server.address.toString(), " already connected");
56 return;
57 }
58 if(server.isTarget)
59 this->targets._connections.emplace(&server);
60 else
61 initiators._connections.emplace(&server);
62 NOTE("Connection established with ", server.address.toString(), " server");
63 if (!server.isTarget)
64 server.sendHello(parameters);
65 OnConnection::raise(server);
66 };
67
68 onServerDisconnection = [this](const Exception& ex,ServerConnection& server) {
69 if (_connections.erase(&server) > 0) {
70 // connected
71 if (server.isTarget)
72 this->targets._connections.erase(&server);
73 else
74 initiators._connections.erase(&server);
75
76 if (ex)
77 ERROR("Disconnection from ", server.address.toString(), " server, ", ex.error())
78 else
79 NOTE("Disconnection from ", server.address.toString(), " server ")
80
81 OnDisconnection::raise(ex, server);
82 }
83
84 if (_clients.erase(&server) > 0)
85 delete &server;
86 };
87
88
89 string targets;
90 parameters.getString("servers.targets",targets);
91
92 String::ForEach forEach( [this](UInt32 index, const char* target) {
93 const char* query = strchr(target,'?');
94 if (query) {
95 *(char*)query = '\0';
96 ++query;
97 }
98 SocketAddress address;
99 Exception ex;
100 bool success;
101 EXCEPTION_TO_LOG(success=address.set(ex, target), "Servers ", target, " target");
102 if (success) {
103 ServerConnection& server(**_targets.emplace(new ServerConnection(address,_server.manager(),query)).first);
104 server.OnHello::subscribe(onServerHello);

Callers 2

StartMethod · 0.45
mainMethod · 0.45

Calls 5

sendHelloMethod · 0.80
errorMethod · 0.80
eraseMethod · 0.45
getStringMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected