246 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
 | 
						||
process.on('message',data => {
 | 
						||
    const { Client } = require("./Client.js");
 | 
						||
    const { Room } = require("./Services/Room");
 | 
						||
    switch(data.type)
 | 
						||
    {
 | 
						||
        case "CLIENT_CREATED":{
 | 
						||
            //slog("CLIENT_CREATED");
 | 
						||
            let client = new Client();
 | 
						||
            client.isProxy = true;
 | 
						||
            client.proxyProcess = data.pid;
 | 
						||
            client.id = data.uuid;
 | 
						||
            if(Client.clients.has(client.id))
 | 
						||
            {
 | 
						||
                console.error("IPC: Zaten var olan kullanıcı oluşturuluyor")
 | 
						||
            }else{
 | 
						||
                Client.clients.set(client.id, client);
 | 
						||
            }
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "CLIENT_UPDATE_PROP":{
 | 
						||
 | 
						||
            data.value = transformDeserialization(data.value, data.typing);
 | 
						||
 | 
						||
            //slog("CLIENT_UPDATE_PROP");
 | 
						||
            let client = Client.clients.get(data.uuid);
 | 
						||
            client[data.name] = data.value;
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "CLIENT_SEND_MESSAGE":{
 | 
						||
            //slog("CLIENT_SEND_MESSAGE");
 | 
						||
            let client = Client.clients.get(data.uuid);
 | 
						||
            if(client)
 | 
						||
            {
 | 
						||
                if(client.isProxy != true)
 | 
						||
                {
 | 
						||
                    client.send(data.message)
 | 
						||
                }else{
 | 
						||
                    console.error("IPC: Proxy olmayan bir client için IPC mesajı alındı")
 | 
						||
                }
 | 
						||
            }else{
 | 
						||
                console.error("IPC: Olmayan bir kullanıcı için mesaj gönderiliyor")
 | 
						||
            }
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "CLIENT_DESTROY":{
 | 
						||
            //slog("CLIENT_DESTROY");
 | 
						||
            if(Client.clients.has(data.uuid))
 | 
						||
            {
 | 
						||
                Client.clients.delete(data.uuid);
 | 
						||
            }else{
 | 
						||
                console.error("IPC: Olmayan bir kullanıcı için silme gerçekleştiriliyor")
 | 
						||
            }
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "ROOM_CREATED":{
 | 
						||
            //slog("ROOM_CREATED");
 | 
						||
            let room = Room.fromJSON(data.value);
 | 
						||
            Room.rooms.set(room.id, room);
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "ROOM_UPDATE_PROP":{
 | 
						||
 | 
						||
            data.value = transformDeserialization(data.value, data.typing);
 | 
						||
 | 
						||
 | 
						||
            //slog("ROOM_UPDATE_PROP");
 | 
						||
            let room = Room.rooms.get(data.uuid);
 | 
						||
            room[data.name] = data.value;
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "ROOM_JOIN_CLIENT":{
 | 
						||
            //slog("ROOM_JOIN_CLIENT");
 | 
						||
            let room = Room.rooms.get(data.uuid);
 | 
						||
            let client = Client.clients.get(data.client);
 | 
						||
            if(room && client)
 | 
						||
            {
 | 
						||
                client.rooms.add(room.id);
 | 
						||
                room.clients.set(client.id, client);
 | 
						||
            }
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "ROOM_EJECT_CLIENT":{
 | 
						||
            //slog("ROOM_EJECT_CLIENT");
 | 
						||
            let room = Room.rooms.get(data.uuid);
 | 
						||
            let client = Client.clients.get(data.client);
 | 
						||
            if(room && client)
 | 
						||
            {
 | 
						||
                client.rooms.delete(room.id);
 | 
						||
                room.clients.delete(client.id, client);
 | 
						||
            }
 | 
						||
            break;
 | 
						||
        }
 | 
						||
        case "ROOM_DESTROY":{
 | 
						||
            //slog("ROOM_DESTROY");
 | 
						||
            Room.rooms.delete(data.value);
 | 
						||
            break;
 | 
						||
        }
 | 
						||
    }
 | 
						||
});
 | 
						||
 | 
						||
function CLIENT_CREATED(uuid)
 | 
						||
{
 | 
						||
    mlog("CLIENT_CREATED");
 | 
						||
    process.send({
 | 
						||
        type:'CLIENT_CREATED',
 | 
						||
        uuid: uuid
 | 
						||
    })
 | 
						||
};
 | 
						||
function CLIENT_UPDATE_PROP(uuid, name, value)
 | 
						||
{
 | 
						||
    mlog("CLIENT_UPDATE_PROP");
 | 
						||
    
 | 
						||
    let typing = value.__proto__.constructor.name;
 | 
						||
    value = transformSerialization(value);
 | 
						||
    
 | 
						||
    process.send({
 | 
						||
        type:'CLIENT_UPDATE_PROP',
 | 
						||
        uuid: uuid,
 | 
						||
        name,
 | 
						||
        value,
 | 
						||
        typing
 | 
						||
    })
 | 
						||
};
 | 
						||
function CLIENT_SEND_MESSAGE(uuid, message, clusterPid)
 | 
						||
{
 | 
						||
    mlog("CLIENT_SEND_MESSAGE");
 | 
						||
    process.send({
 | 
						||
        type:'CLIENT_SEND_MESSAGE',
 | 
						||
        uuid: uuid,
 | 
						||
        message,
 | 
						||
        process:clusterPid
 | 
						||
    })
 | 
						||
};
 | 
						||
function CLIENT_DESTROY(uuid)
 | 
						||
{
 | 
						||
    mlog("CLIENT_DESTROY");
 | 
						||
    process.send({
 | 
						||
        type:'CLIENT_DESTROY',
 | 
						||
        uuid: uuid
 | 
						||
    })
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
function ROOM_CREATED(room)
 | 
						||
{
 | 
						||
    mlog("ROOM_CREATED");
 | 
						||
    let raw = room.toJSON(true);
 | 
						||
    process.send({
 | 
						||
        type:'ROOM_CREATED',
 | 
						||
        value: raw
 | 
						||
    })
 | 
						||
};
 | 
						||
 | 
						||
function ROOM_UPDATE_PROP(uuid, name, value)
 | 
						||
{
 | 
						||
    mlog("ROOM_UPDATE_PROP");
 | 
						||
 | 
						||
    let typing = value.__proto__.constructor.name;
 | 
						||
    value = transformSerialization(value);
 | 
						||
 | 
						||
    process.send({
 | 
						||
        type:'ROOM_UPDATE_PROP',
 | 
						||
        uuid: uuid,
 | 
						||
        name,
 | 
						||
        value,
 | 
						||
        typing
 | 
						||
    })
 | 
						||
};
 | 
						||
 | 
						||
function ROOM_JOIN_CLIENT(uuid, client)
 | 
						||
{
 | 
						||
    mlog("ROOM_JOIN_CLIENT");
 | 
						||
    process.send({
 | 
						||
        type:'ROOM_JOIN_CLIENT',
 | 
						||
        uuid: uuid,
 | 
						||
        client
 | 
						||
    })
 | 
						||
};
 | 
						||
function ROOM_EJECT_CLIENT(uuid, client)
 | 
						||
{
 | 
						||
    mlog("ROOM_EJECT_CLIENT");
 | 
						||
    process.send({
 | 
						||
        type:'ROOM_EJECT_CLIENT',
 | 
						||
        uuid: uuid,
 | 
						||
        client
 | 
						||
    })
 | 
						||
};
 | 
						||
 | 
						||
function ROOM_DESTROY(room)
 | 
						||
{
 | 
						||
    mlog("ROOM_DESTROY");
 | 
						||
    process.send({
 | 
						||
        type:'ROOM_DESTROY',
 | 
						||
        value: room.id
 | 
						||
    })
 | 
						||
};
 | 
						||
 | 
						||
function mlog(command)
 | 
						||
{
 | 
						||
    return;
 | 
						||
    console.log("M",process.pid, command)
 | 
						||
}
 | 
						||
function slog(command)
 | 
						||
{
 | 
						||
    return;
 | 
						||
    console.log("S",process.pid, command)
 | 
						||
}
 | 
						||
 | 
						||
function transformSerialization(value)
 | 
						||
{
 | 
						||
    switch(value.__proto__.constructor.name)
 | 
						||
    {
 | 
						||
        case "Map":{
 | 
						||
            return [...value];
 | 
						||
        }
 | 
						||
        case "Set":{
 | 
						||
            return [...value];
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 | 
						||
function transformDeserialization(value,type)
 | 
						||
{
 | 
						||
    switch(type)
 | 
						||
    {
 | 
						||
        case "Map":{
 | 
						||
            return new Map(value);
 | 
						||
        }
 | 
						||
        case "Set":{
 | 
						||
            return new Set(value)
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
exports.CLIENT_CREATED = CLIENT_CREATED;
 | 
						||
exports.CLIENT_UPDATE_PROP = CLIENT_UPDATE_PROP;
 | 
						||
exports.CLIENT_DESTROY = CLIENT_DESTROY;
 | 
						||
exports.CLIENT_SEND_MESSAGE = CLIENT_SEND_MESSAGE;
 | 
						||
exports.ROOM_CREATED = ROOM_CREATED;
 | 
						||
exports.ROOM_UPDATE_PROP = ROOM_UPDATE_PROP;
 | 
						||
exports.ROOM_JOIN_CLIENT = ROOM_JOIN_CLIENT;
 | 
						||
exports.ROOM_EJECT_CLIENT = ROOM_EJECT_CLIENT;
 | 
						||
exports.ROOM_DESTROY = ROOM_DESTROY;
 | 
						||
exports.mlog = mlog;
 | 
						||
exports.slog = slog; |