feat: 메시지 띄우기(wip)
This commit is contained in:
@@ -29,7 +29,7 @@ class GetRecentMessage extends \sammo\BaseAPI
|
|||||||
|
|
||||||
public function getRequiredSessionMode(): int
|
public function getRequiredSessionMode(): int
|
||||||
{
|
{
|
||||||
return static::REQ_GAME_LOGIN;
|
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function delayFrequentCall(Session $session): void
|
private function delayFrequentCall(Session $session): void
|
||||||
|
|||||||
@@ -20,18 +20,45 @@
|
|||||||
<template v-if="messageNational.length == 0">
|
<template v-if="messageNational.length == 0">
|
||||||
<div>메시지가 없습니다.</div>
|
<div>메시지가 없습니다.</div>
|
||||||
</template>
|
</template>
|
||||||
|
<MessagePlate
|
||||||
|
v-for="msg of messageNational"
|
||||||
|
:key="msg.id"
|
||||||
|
:modelValue="msg"
|
||||||
|
:generalID="generalID"
|
||||||
|
:generalName="generalName"
|
||||||
|
:nationID="nationID"
|
||||||
|
:permissionLevel="permissionLevel"
|
||||||
|
></MessagePlate>
|
||||||
</div>
|
</div>
|
||||||
<div class="PrivateTalk">
|
<div class="PrivateTalk">
|
||||||
<div>개인 메시지</div>
|
<div>개인 메시지</div>
|
||||||
<template v-if="messagePrivate.length == 0">
|
<template v-if="messagePrivate.length == 0">
|
||||||
<div>메시지가 없습니다.</div>
|
<div>메시지가 없습니다.</div>
|
||||||
</template>
|
</template>
|
||||||
|
<MessagePlate
|
||||||
|
v-for="msg of messagePrivate"
|
||||||
|
:key="msg.id"
|
||||||
|
:modelValue="msg"
|
||||||
|
:generalID="generalID"
|
||||||
|
:generalName="generalName"
|
||||||
|
:nationID="nationID"
|
||||||
|
:permissionLevel="permissionLevel"
|
||||||
|
></MessagePlate>
|
||||||
</div>
|
</div>
|
||||||
<div class="DiplomacyTalk">
|
<div class="DiplomacyTalk">
|
||||||
<div>외교 메시지</div>
|
<div>외교 메시지</div>
|
||||||
<template v-if="messageDiplomacy.length == 0">
|
<template v-if="messageDiplomacy.length == 0">
|
||||||
<div>메시지가 없습니다.</div>
|
<div>메시지가 없습니다.</div>
|
||||||
</template>
|
</template>
|
||||||
|
<MessagePlate
|
||||||
|
v-for="msg of messageDiplomacy"
|
||||||
|
:key="msg.id"
|
||||||
|
:modelValue="msg"
|
||||||
|
:generalID="generalID"
|
||||||
|
:generalName="generalName"
|
||||||
|
:nationID="nationID"
|
||||||
|
:permissionLevel="permissionLevel"
|
||||||
|
></MessagePlate>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -42,6 +69,10 @@ import { SammoAPI } from "@/SammoAPI";
|
|||||||
import { isString } from "lodash";
|
import { isString } from "lodash";
|
||||||
import type { MsgItem, MsgResponse, MsgType } from "@/defs/API/Message";
|
import type { MsgItem, MsgResponse, MsgType } from "@/defs/API/Message";
|
||||||
import MessagePlate from "@/components/MessagePlate.vue";
|
import MessagePlate from "@/components/MessagePlate.vue";
|
||||||
|
import { useToast } from "bootstrap-vue-3";
|
||||||
|
import { unwrap } from "@/util/unwrap";
|
||||||
|
|
||||||
|
const toasts = unwrap(useToast());
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(event: "request-refresh"): void;
|
(event: "request-refresh"): void;
|
||||||
@@ -66,7 +97,7 @@ onMounted(() => {
|
|||||||
|
|
||||||
const lastSequence = ref(-1);
|
const lastSequence = ref(-1);
|
||||||
|
|
||||||
const initRefreshLimit = 5;
|
const initRefreshLimit = 20;
|
||||||
let refreshLimit = initRefreshLimit;
|
let refreshLimit = initRefreshLimit;
|
||||||
const refreshP: Set<Promise<boolean>> = new Set();
|
const refreshP: Set<Promise<boolean>> = new Set();
|
||||||
let lastRefreshDone = 0;
|
let lastRefreshDone = 0;
|
||||||
@@ -93,11 +124,11 @@ function updateMsgResponse(response: MsgResponse) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(response.generalName != generalName.value){
|
if (response.generalName != generalName.value) {
|
||||||
emit("request-refresh");
|
emit("request-refresh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(response.nationID != nationID.value){
|
if (response.nationID != nationID.value) {
|
||||||
emit("request-refresh");
|
emit("request-refresh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -107,7 +138,6 @@ function updateMsgResponse(response: MsgResponse) {
|
|||||||
for (const msgType of Object.keys(messageIndexedList) as (keyof typeof messageIndexedList)[]) {
|
for (const msgType of Object.keys(messageIndexedList) as (keyof typeof messageIndexedList)[]) {
|
||||||
const msgList = messageIndexedList[msgType];
|
const msgList = messageIndexedList[msgType];
|
||||||
|
|
||||||
|
|
||||||
const newMsgList = response[msgType];
|
const newMsgList = response[msgType];
|
||||||
console.log(msgType, msgList, newMsgList);
|
console.log(msgType, msgList, newMsgList);
|
||||||
if (newMsgList.length == 0) {
|
if (newMsgList.length == 0) {
|
||||||
@@ -171,11 +201,19 @@ function beginRefreshTimer() {
|
|||||||
if (refreshP.size > refreshLimit && refreshTimer) {
|
if (refreshP.size > refreshLimit && refreshTimer) {
|
||||||
clearInterval(refreshTimer);
|
clearInterval(refreshTimer);
|
||||||
refreshTimer = null;
|
refreshTimer = null;
|
||||||
alert("서버 응답이 없습니다. 새로고침을 해주세요.");
|
toasts.danger(
|
||||||
|
{
|
||||||
|
title: "메시지 자동 갱신 실패",
|
||||||
|
body: "서버 응답이 없습니다. 새로고침을 해주세요.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
delay: 1000 * 3600,
|
||||||
|
}
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshP.add(tryRefresh());
|
void tryRefresh();
|
||||||
}
|
}
|
||||||
}, 2500);
|
}, 2500);
|
||||||
}
|
}
|
||||||
@@ -196,15 +234,17 @@ async function tryRefresh() {
|
|||||||
if (lastRefreshDone < now) {
|
if (lastRefreshDone < now) {
|
||||||
lastRefreshDone = now;
|
lastRefreshDone = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (isString(e)) {
|
if (isString(e)) {
|
||||||
alert(e);
|
toasts.warning({
|
||||||
|
title: '갱신 실패',
|
||||||
|
body: e,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!response){
|
if (!response) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,6 +254,7 @@ async function tryRefresh() {
|
|||||||
})();
|
})();
|
||||||
void waiterP.then((result) => {
|
void waiterP.then((result) => {
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
console.error("?! result");
|
||||||
refreshLimit--;
|
refreshLimit--;
|
||||||
} else {
|
} else {
|
||||||
refreshLimit = initRefreshLimit;
|
refreshLimit = initRefreshLimit;
|
||||||
|
|||||||
Reference in New Issue
Block a user