Kernel/Tasking/InterProcessCommunication.cpp
2022-10-27 03:06:43 +03:00

65 lines
1.5 KiB
C++

#include <ipc.hpp>
#include "../kernel.h"
InterProcessCommunication::IPC *ipc = nullptr;
namespace InterProcessCommunication
{
IPCHandle *IPC::RegisterHandle(IPCPort Port)
{
if (Port == 0)
return nullptr;
Tasking::PCB *pcb = TaskManager->GetCurrentProcess();
if (pcb->IPCHandles->Get((int)Port) != 0)
return nullptr;
IPCHandle *handle = new IPCHandle;
handle->ID = -1;
handle->Buffer = nullptr;
handle->Length = 0;
handle->Type = IPCOperationNone;
handle->Listening = 0;
handle->Error = IPCUnknown;
pcb->IPCHandles->AddNode(Port, (uint64_t)handle);
return handle;
}
IPCHandle *IPC::Wait(IPCPort port)
{
return nullptr;
}
IPCError IPC::Read(int PID, IPCPort port, void *buf, int size)
{
return IPCError{IPCUnknown};
}
IPCError IPC::Write(int PID, IPCPort port, void *buf, int size)
{
return IPCError{IPCUnknown};
}
void IPCServiceStub()
{
trace("IPC Service Started.");
TaskManager->GetCurrentThread()->SetPriority(1);
// TODO: do something useful here, like, IPC event viewer or smth...
while (1)
;
}
IPC::IPC()
{
trace("Starting IPC Service...");
TaskManager->CreateThread(TaskManager->GetCurrentProcess(), (Tasking::IP)IPCServiceStub);
TaskManager->GetCurrentThread()->Rename("IPC Service");
}
IPC::~IPC()
{
}
}