some fix.

This commit is contained in:
ykiko
2024-07-25 22:38:35 +08:00
parent c5a34e0b9e
commit e5b0833c65
5 changed files with 50 additions and 50 deletions

76
src/Server/Server.cpp Normal file
View File

@@ -0,0 +1,76 @@
#include <Server/Server.h>
#include <Server/Setting.h>
#include <Server/Transport.h>
#include <Protocol/Protocol.h>
#include <Support/Logger.h>
#include <Support/Serialize.h>
namespace clice {
Server server;
int Server::run(int argc, char** argv) {
assert(argc == 2);
logger::init(argv[0]);
logger::info("reading settings...");
setting = deserialize<Setting>(json::parse(argv[1]));
logger::info("settings: {}", argv[1]);
uv_loop_t* loop = uv_default_loop();
if(setting.mode == "pipe") {
transport = std::make_unique<Pipe>();
} else if(setting.mode == "socket") {
// transport = std::make_unique<Socket>();
} else if(setting.mode == "index") {
transport = {};
} else {
logger::error("invalid mode: {}", setting.mode);
return 1;
}
// start the event loop
logger::info("starting the server...");
return uv_run(loop, UV_RUN_DEFAULT);
}
int Server::exit() {
// stop the event loop
uv_stop(uv_default_loop());
return 0;
}
void Server::handle_message(std::string_view message) {
try {
auto input = json::parse(message);
std::string_view method = input["method"].get<std::string_view>();
if(method == "initialize") {
int id = input["id"].get<int>();
// initialize();
json json = {
{"id", id },
{"result", clice::serialize(InitializeResult{})}
};
transport->send(json.dump());
} else if(method == "textDocument/didOpen") {
// didOpen();
auto params = deserialize<DidOpenTextDocumentParams>(input["params"]);
logger::info("serialize successfully: {}", serialize(params).dump());
auto task = didOpen(params);
task.resume();
}
} catch(std::exception& e) {
logger::error("failed to parse JSON: {}", e.what());
return;
}
}
Task<void> Server::didOpen(const DidOpenTextDocumentParams& params) {
logger::info("textDocument/didOpen: {}", params.textDocument.uri);
auto& textDocument = params.textDocument;
co_await scheduler->update(textDocument.uri, textDocument.text);
}
} // namespace clice