[Add] Add back the SSH functionality.
This commit is contained in:
parent
6272800a22
commit
c7e8d97c63
@ -5,7 +5,9 @@
|
||||
#include "lua_processor.h"
|
||||
#include "vfs_manager.h"
|
||||
|
||||
CommandProcessor::CommandProcessor(vfs_node* starting_dir) {
|
||||
CommandProcessor::CommandProcessor(vfs_node* starting_dir,
|
||||
std::map<std::string, vfs_node*>& world_vfs) :
|
||||
_world_vfs(world_vfs) {
|
||||
_current_dir = starting_dir;
|
||||
_lua = new LuaProcessor();
|
||||
}
|
||||
@ -125,6 +127,13 @@ std::string CommandProcessor::_handle_vfs_action(sol::table action) {
|
||||
return ""; /* Success. */
|
||||
}
|
||||
return std::string("rm: cannot remove '") + path + "': No such file or directory.";
|
||||
} else if(action_name == "ssh") {
|
||||
std::string target_ip = action["target"].get_or<std::string>("");
|
||||
if(_world_vfs.count(target_ip)) {
|
||||
_current_dir = _world_vfs[target_ip];
|
||||
return "Connected to " + target_ip;
|
||||
}
|
||||
return "ssh: Could not resolve hostname " + target_ip + ": Name or service not known";
|
||||
}
|
||||
return "Error: Unknown VFS action '" + action_name + "'";
|
||||
}
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
#include "vfs.h"
|
||||
#include <lua_processor.h>
|
||||
|
||||
class CommandProcessor {
|
||||
public:
|
||||
CommandProcessor(vfs_node* starting_dir);
|
||||
CommandProcessor(vfs_node* starting_dir, std::map<std::string, vfs_node*>& world_vfs);
|
||||
~CommandProcessor(void);
|
||||
|
||||
std::string process_command(const std::string& command);
|
||||
@ -16,5 +17,6 @@ public:
|
||||
private:
|
||||
std::string _handle_vfs_action(sol::table action);
|
||||
vfs_node* _current_dir;
|
||||
std::map<std::string, vfs_node*>& _world_vfs;
|
||||
LuaProcessor* _lua;
|
||||
};
|
||||
|
||||
@ -59,7 +59,7 @@ void NetworkManager::start_accept(void) {
|
||||
|
||||
/* Create a new player for this connection. */
|
||||
uint32_t player_id = _next_player_id++;
|
||||
auto new_player = std::make_unique<Player>(player_id, _vfs_manager);
|
||||
auto new_player = std::make_unique<Player>(player_id, _vfs_manager, _world_vfs);
|
||||
Player* new_player_ptr = new_player.get();
|
||||
_players[player_id] = std::move(new_player);
|
||||
new_connection->set_id(player_id);
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
#include "player.h"
|
||||
#include "command_processor.h"
|
||||
|
||||
Player::Player(uint32_t new_id, VFSManager& vfs_manager) :
|
||||
Player::Player(uint32_t new_id, VFSManager& vfs_manager,
|
||||
std::map<std::string, vfs_node*>& world_vfs) :
|
||||
id(new_id),
|
||||
vfs_root(vfs_manager.create_vfs("player")),
|
||||
cmd_processor(new CommandProcessor(vfs_root)) {}
|
||||
cmd_processor(new CommandProcessor(vfs_root, world_vfs)) {}
|
||||
|
||||
Player::~Player(void) {
|
||||
if(cmd_processor) {
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
class Player {
|
||||
public:
|
||||
Player(uint32_t id, VFSManager& vfs_manager);
|
||||
Player(uint32_t id, VFSManager& vfs_manager, std::map<std::string, vfs_node*>& world_vfs);
|
||||
~Player(void);
|
||||
|
||||
uint32_t id;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user