Skip to content

Commit b2e8c38

Browse files
committed
Dynamic port numbering in C# plugin
1 parent f2ac4ae commit b2e8c38

4 files changed

Lines changed: 95 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ nbproject/
1212
## Build folders
1313
build/
1414
build_*/
15+
Build/
16+
Build_*/
1517
install/
1618
install_*/

plugins/csharp/csharp.sln

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
Microsoft Visual Studio Solution File, Format Version 12.00
2+
# Visual Studio Version 17
3+
VisualStudioVersion = 17.5.2.0
4+
MinimumVisualStudioVersion = 10.0.40219.1
5+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "db_model", "db_model", "{2E2F0E00-502D-A052-0019-82CFB9270E3D}"
6+
EndProject
7+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{D4C4D1C2-DE9C-AF20-17FD-0A3EB2BFD436}"
8+
EndProject
9+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "service", "service", "{226567F5-DD15-7888-5BF1-C4407778305A}"
10+
EndProject
11+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "parser", "parser", "{BC34E35A-B109-A120-90EC-15530B70B9CB}"
12+
EndProject
13+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbModel", "db_model\DbModel.csproj", "{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1}"
14+
EndProject
15+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqliteMigrations", "migrations\sqliteMigrations\SqliteMigrations.csproj", "{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54}"
16+
EndProject
17+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PgsqlMigrations", "migrations\pgsqlMigrations\PgsqlMigrations.csproj", "{20C587AF-64DB-68B4-1F92-61681232D74B}"
18+
EndProject
19+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src_csharp", "src_csharp", "{9BD6E17B-7A65-7B8B-5096-A508D0BE5AAA}"
20+
EndProject
21+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharpservice", "service\src_csharp\csharpservice.csproj", "{1AF03105-21A5-3508-A40F-365ADA9DFF92}"
22+
EndProject
23+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src_csharp", "src_csharp", "{37C60329-C8F7-3ACB-DE03-F714C9EE58C5}"
24+
EndProject
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpParser", "parser\src_csharp\CSharpParser.csproj", "{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B}"
26+
EndProject
27+
Global
28+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
29+
Debug|Any CPU = Debug|Any CPU
30+
Release|Any CPU = Release|Any CPU
31+
EndGlobalSection
32+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
33+
{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
34+
{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
35+
{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
36+
{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1}.Release|Any CPU.Build.0 = Release|Any CPU
37+
{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
38+
{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54}.Debug|Any CPU.Build.0 = Debug|Any CPU
39+
{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54}.Release|Any CPU.ActiveCfg = Release|Any CPU
40+
{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54}.Release|Any CPU.Build.0 = Release|Any CPU
41+
{20C587AF-64DB-68B4-1F92-61681232D74B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
42+
{20C587AF-64DB-68B4-1F92-61681232D74B}.Debug|Any CPU.Build.0 = Debug|Any CPU
43+
{20C587AF-64DB-68B4-1F92-61681232D74B}.Release|Any CPU.ActiveCfg = Release|Any CPU
44+
{20C587AF-64DB-68B4-1F92-61681232D74B}.Release|Any CPU.Build.0 = Release|Any CPU
45+
{1AF03105-21A5-3508-A40F-365ADA9DFF92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
46+
{1AF03105-21A5-3508-A40F-365ADA9DFF92}.Debug|Any CPU.Build.0 = Debug|Any CPU
47+
{1AF03105-21A5-3508-A40F-365ADA9DFF92}.Release|Any CPU.ActiveCfg = Release|Any CPU
48+
{1AF03105-21A5-3508-A40F-365ADA9DFF92}.Release|Any CPU.Build.0 = Release|Any CPU
49+
{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
50+
{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
51+
{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
52+
{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B}.Release|Any CPU.Build.0 = Release|Any CPU
53+
EndGlobalSection
54+
GlobalSection(SolutionProperties) = preSolution
55+
HideSolutionNode = FALSE
56+
EndGlobalSection
57+
GlobalSection(NestedProjects) = preSolution
58+
{BADE2559-4F0F-21F6-067B-8EDF7DE9DFC1} = {2E2F0E00-502D-A052-0019-82CFB9270E3D}
59+
{2C9A9B86-A50E-C025-B4E0-195D2ACD4B54} = {D4C4D1C2-DE9C-AF20-17FD-0A3EB2BFD436}
60+
{20C587AF-64DB-68B4-1F92-61681232D74B} = {D4C4D1C2-DE9C-AF20-17FD-0A3EB2BFD436}
61+
{9BD6E17B-7A65-7B8B-5096-A508D0BE5AAA} = {226567F5-DD15-7888-5BF1-C4407778305A}
62+
{1AF03105-21A5-3508-A40F-365ADA9DFF92} = {9BD6E17B-7A65-7B8B-5096-A508D0BE5AAA}
63+
{37C60329-C8F7-3ACB-DE03-F714C9EE58C5} = {BC34E35A-B109-A120-90EC-15530B70B9CB}
64+
{568E5C5A-2A3E-AEA2-1355-EC26E382DA2B} = {37C60329-C8F7-3ACB-DE03-F714C9EE58C5}
65+
EndGlobalSection
66+
GlobalSection(ExtensibilityGlobals) = postSolution
67+
SolutionGuid = {17FCE6F1-24FA-4D94-8799-D869033FFB44}
68+
EndGlobalSection
69+
EndGlobal

plugins/csharp/service/include/service/csharpservice.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ class CsharpServiceHandler : virtual public LanguageServiceIf
332332

333333
cc::service::csharp::CSharpQueryHandler _csharpQueryHandler;
334334
static int _thriftServerPort;
335+
static int getThriftServerPort();
335336
};
336337

337338
} // language

plugins/csharp/service/src/csharpservice.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <util/util.h>
44
#include <model/file.h>
55
#include <model/file-odb.hxx>
6+
#include <boost/asio.hpp>
67

78
namespace cc
89
{
@@ -15,7 +16,7 @@ namespace fs = boost::filesystem;
1516
namespace bp = boost::process;
1617
namespace pt = boost::property_tree;
1718

18-
int CsharpServiceHandler::_thriftServerPort = 9091;
19+
int CsharpServiceHandler::_thriftServerPort = getThriftServerPort();
1920

2021
CsharpServiceHandler::CsharpServiceHandler(
2122
std::shared_ptr<odb::database> db_,
@@ -46,6 +47,27 @@ CsharpServiceHandler::CsharpServiceHandler(
4647
}
4748
}
4849

50+
int CsharpServiceHandler::getThriftServerPort()
51+
{
52+
boost::asio::io_service service;
53+
boost::system::error_code ec;
54+
55+
for (int port = 9091; port <= 65535; ++port){
56+
boost::asio::ip::tcp::acceptor acceptor(service);
57+
boost::asio::ip::tcp::endpoint endPoint(boost::asio::ip::tcp::v4(), port);
58+
acceptor.open(endPoint.protocol(), ec);
59+
acceptor.bind(endPoint, ec);
60+
61+
if (!ec) {
62+
//LOG(info) << "[C# Plugin] Thrift server bound to port: " << port << std::endl;
63+
acceptor.close(ec);
64+
return port;
65+
}
66+
}
67+
68+
return 9091;
69+
}
70+
4971
std::string CsharpServiceHandler::getDbString()
5072
{
5173
pt::ptree _pt;

0 commit comments

Comments
 (0)