Commit 77e2addb authored by nanahira's avatar nanahira

use async for mycard match

parent a14632fc
......@@ -1925,7 +1925,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
checksum += buf.readUInt8(i)
(checksum & 0xFF) == 0
buffer_handle_callback = (buffer, decrypted_buffer, match_permit)->
create_room_with_action = (buffer, decrypted_buffer, match_permit)->
if client.closed
return
action = buffer.readUInt8(1) >> 4
......@@ -2044,7 +2044,30 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
room.connect(client)
return
match_permit_callback = (buffer, match_permit) ->
_async.auto({
match_permit: (done) ->
if(!settings.modules.arena_mode.check_permit)
done(null, null)
return
request
url: settings.modules.arena_mode.check_permit,
json: true,
qs:
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
, (error, response, body)->
if client.closed
done(null, null)
return
if !error and body
done(null, boddy)
else
log.warn("Match permit request error", error)
match_permit_callback(null, null)
return
return
get_user: (done) ->
if client.closed
return
if id = users_cache[client.name]
......@@ -2053,7 +2076,10 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
for i in [0, 2, 4]
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i)
if check_buffer_indentity(decrypted_buffer)
return buffer_handle_callback(decrypted_buffer, decrypted_buffer, match_permit)
done(null, {
original: decrypted_buffer,
decrypted: decrypted_buffer
})
#TODO: query database directly, like preload.
request
......@@ -2075,36 +2101,27 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
buffer = decrypted_buffer
else
log.warn("READ USER FAIL", error, body)
ygopro.stoc_die(client, "${create_room_failed}")
done("${create_room_failed}")
return
# buffer != decrypted_buffer ==> auth failed
if !check_buffer_indentity(buffer)
ygopro.stoc_die(client, '${invalid_password_checksum}')
done('${invalid_password_checksum}')
return
return buffer_handle_callback(buffer, decrypted_buffer, match_permit)
done(null, {
original: buffer,
decrypted: decrypted_buffer
})
return
if settings.modules.arena_mode.check_permit
request
url: settings.modules.arena_mode.check_permit,
json: true,
qs:
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
, (error, response, body)->
if client.closed
}, (err, data) ->
if(client.closed)
return
if !error and body
match_permit_callback(buffer, body)
else
log.warn("Match permit request error", error)
match_permit_callback(buffer, null)
if(err)
ygopro.stoc_die(client, err)
return
else
match_permit_callback(buffer, null)
create_room_with_action(data.get_user.original, data.get_user.decrypted, match_permit)
)
else if settings.modules.challonge.enabled
......
......@@ -2354,7 +2354,7 @@
});
ygopro.ctos_follow('JOIN_GAME', false, function(buffer, info, client, server, datas) {
var buffer_handle_callback, check_buffer_indentity, len2, len3, m, match_permit_callback, n, name, pre_room, ref2, ref3, replay_id, room;
var check_buffer_indentity, create_room_with_action, len2, len3, m, n, name, pre_room, ref2, ref3, replay_id, room;
info.pass = info.pass.trim();
client.pass = info.pass;
if (CLIENT_is_able_to_reconnect(client) || CLIENT_is_able_to_kick_reconnect(client)) {
......@@ -2435,7 +2435,7 @@
}
return (checksum & 0xFF) === 0;
};
buffer_handle_callback = function(buffer, decrypted_buffer, match_permit) {
create_room_with_action = function(buffer, decrypted_buffer, match_permit) {
var action, len2, len3, m, n, name, opt1, opt2, opt3, options, player, ref2, ref3, room, room_title, title;
if (client.closed) {
return;
......@@ -2577,7 +2577,34 @@
room.connect(client);
}
};
match_permit_callback = function(buffer, match_permit) {
_async.auto({
match_permit: function(done) {
if (!settings.modules.arena_mode.check_permit) {
done(null, null);
return;
}
request({
url: settings.modules.arena_mode.check_permit,
json: true,
qs: {
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
}
}, function(error, response, body) {
if (client.closed) {
done(null, null);
return;
}
if (!error && body) {
done(null, boddy);
} else {
log.warn("Match permit request error", error);
match_permit_callback(null, null);
}
});
},
get_user: function(done) {
var decrypted_buffer, i, id, len2, m, ref2, secret;
if (client.closed) {
return;
......@@ -2591,7 +2618,10 @@
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
}
if (check_buffer_indentity(decrypted_buffer)) {
return buffer_handle_callback(decrypted_buffer, decrypted_buffer, match_permit);
done(null, {
original: decrypted_buffer,
decrypted: decrypted_buffer
});
}
}
request({
......@@ -2619,39 +2649,29 @@
}
} else {
log.warn("READ USER FAIL", error, body);
ygopro.stoc_die(client, "${create_room_failed}");
done("${create_room_failed}");
return;
}
if (!check_buffer_indentity(buffer)) {
ygopro.stoc_die(client, '${invalid_password_checksum}');
done('${invalid_password_checksum}');
return;
}
return buffer_handle_callback(buffer, decrypted_buffer, match_permit);
return done(null, {
original: buffer,
decrypted: decrypted_buffer
});
});
};
if (settings.modules.arena_mode.check_permit) {
request({
url: settings.modules.arena_mode.check_permit,
json: true,
qs: {
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
}
}, function(error, response, body) {
}, function(err, data) {
if (client.closed) {
return;
}
if (!error && body) {
match_permit_callback(buffer, body);
} else {
log.warn("Match permit request error", error);
match_permit_callback(buffer, null);
if (err) {
ygopro.stoc_die(client, err);
return;
}
return create_room_with_action(data.get_user.original, data.get_user.decrypted, match_permit);
});
} else {
match_permit_callback(buffer, null);
}
} else if (settings.modules.challonge.enabled) {
pre_room = ROOM_find_by_name(info.pass);
if (pre_room && pre_room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && settings.modules.cloud_replay.enable_halfway_watch && !pre_room.hostinfo.no_watch) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment