diff --git a/components/chatmain.tsx b/components/chatmain.tsx index e9421623..f396be57 100644 --- a/components/chatmain.tsx +++ b/components/chatmain.tsx @@ -7,11 +7,11 @@ function chatmain({ state }: { state: AppStateType }) { return ( <>
-
+
diff --git a/fresh.gen.ts b/fresh.gen.ts index f97474b8..1d46e13c 100644 --- a/fresh.gen.ts +++ b/fresh.gen.ts @@ -2,82 +2,92 @@ // This file SHOULD be checked into source version control. // This file is automatically updated during development when running `dev.ts`. -import * as $_404 from "./routes/_404.tsx" -import * as $_app from "./routes/_app.tsx" -import * as $_middleware from "./routes/_middleware.ts" -import * as $api_v2_client_block_server from "./routes/api/v2/client/block/server.ts" -import * as $api_v2_client_block_user from "./routes/api/v2/client/block/user.ts" -import * as $api_v2_client_create_community from "./routes/api/v2/client/create/community.ts" -import * as $api_v2_client_create_group from "./routes/api/v2/client/create/group.ts" -import * as $api_v2_client_csrftoken from "./routes/api/v2/client/csrftoken.ts" -import * as $api_v2_client_friends_info_ID_icon_friend from "./routes/api/v2/client/friends/info/[ID]/icon/friend.ts" -import * as $api_v2_client_friends_info_ID_icon_friendcode from "./routes/api/v2/client/friends/info/[ID]/icon/friendcode.ts" -import * as $api_v2_client_friends_info_ID_icon_group from "./routes/api/v2/client/friends/info/[ID]/icon/group.ts" -import * as $api_v2_client_friends_info_ID_profile_friend from "./routes/api/v2/client/friends/info/[ID]/profile/friend.ts" -import * as $api_v2_client_friends_info_ID_profile_friendcode from "./routes/api/v2/client/friends/info/[ID]/profile/friendcode.ts" -import * as $api_v2_client_friends_info_ID_profile_group from "./routes/api/v2/client/friends/info/[ID]/profile/group.ts" -import * as $api_v2_client_friends_list from "./routes/api/v2/client/friends/list.ts" -import * as $api_v2_client_main from "./routes/api/v2/client/main.ts" -import * as $api_v2_client_sessions_login from "./routes/api/v2/client/sessions/login.ts" -import * as $api_v2_client_sessions_logout from "./routes/api/v2/client/sessions/logout.ts" -import * as $api_v2_client_sessions_registers_auth from "./routes/api/v2/client/sessions/registers/auth.ts" -import * as $api_v2_client_sessions_registers_check from "./routes/api/v2/client/sessions/registers/check.ts" -import * as $api_v2_client_sessions_registers_temp from "./routes/api/v2/client/sessions/registers/temp.ts" -import * as $api_v2_client_settings_icon from "./routes/api/v2/client/settings/icon.ts" -import * as $api_v2_client_settings_nickname from "./routes/api/v2/client/settings/nickname.ts" -import * as $api_v2_client_settings_privacy from "./routes/api/v2/client/settings/privacy.ts" -import * as $api_v2_client_talks_delete from "./routes/api/v2/client/talks/delete.ts" -import * as $api_v2_client_talks_read from "./routes/api/v2/client/talks/read.ts" -import * as $api_v2_client_talks_sending_audio from "./routes/api/v2/client/talks/sending/audio.ts" -import * as $api_v2_client_talks_sending_image from "./routes/api/v2/client/talks/sending/image.ts" -import * as $api_v2_client_talks_sending_text from "./routes/api/v2/client/talks/sending/text.ts" -import * as $api_v2_client_talks_sending_update from "./routes/api/v2/client/talks/sending/update.ts" -import * as $api_v2_client_talks_sending_video from "./routes/api/v2/client/talks/sending/video.ts" -import * as $api_v2_client_unblock_server from "./routes/api/v2/client/unblock/server.ts" -import * as $api_v2_client_unblock_user from "./routes/api/v2/client/unblock/user.ts" -import * as $api_v2_client_users_uuid_icon from "./routes/api/v2/client/users/[uuid]/icon.ts" -import * as $api_v2_client_users_icon from "./routes/api/v2/client/users/icon.ts" -import * as $api_v2_client_users_profile from "./routes/api/v2/client/users/profile.ts" -import * as $api_v2_client_users_settings from "./routes/api/v2/client/users/settings.ts" -import * as $api_v2_client_welcome from "./routes/api/v2/client/welcome.ts" -import * as $api_v2_server_activity_accept_community from "./routes/api/v2/server/activity/accept/community.ts" -import * as $api_v2_server_activity_accept_friend from "./routes/api/v2/server/activity/accept/friend.ts" -import * as $api_v2_server_activity_accept_group from "./routes/api/v2/server/activity/accept/group.ts" -import * as $api_v2_server_activity_block_user from "./routes/api/v2/server/activity/block/user.ts" -import * as $api_v2_server_activity_delete_message from "./routes/api/v2/server/activity/delete/message.ts" -import * as $api_v2_server_activity_flag_community from "./routes/api/v2/server/activity/flag/community.ts" -import * as $api_v2_server_activity_flag_group from "./routes/api/v2/server/activity/flag/group.ts" -import * as $api_v2_server_activity_flag_user from "./routes/api/v2/server/activity/flag/user.ts" -import * as $api_v2_server_activity_ignore_friend from "./routes/api/v2/server/activity/ignore/friend.ts" -import * as $api_v2_server_activity_ignore_group from "./routes/api/v2/server/activity/ignore/group.ts" -import * as $api_v2_server_activity_invite_group from "./routes/api/v2/server/activity/invite/group.ts" -import * as $api_v2_server_activity_join_community from "./routes/api/v2/server/activity/join/community.ts" -import * as $api_v2_server_activity_read_message from "./routes/api/v2/server/activity/read/message.ts" -import * as $api_v2_server_activity_request_community from "./routes/api/v2/server/activity/request/community.ts" -import * as $api_v2_server_activity_request_friend from "./routes/api/v2/server/activity/request/friend.ts" -import * as $api_v2_server_activity_talk_audio from "./routes/api/v2/server/activity/talk/audio.ts" -import * as $api_v2_server_activity_talk_image from "./routes/api/v2/server/activity/talk/image.ts" -import * as $api_v2_server_activity_talk_text from "./routes/api/v2/server/activity/talk/text.ts" -import * as $api_v2_server_activity_talk_video from "./routes/api/v2/server/activity/talk/video.ts" -import * as $api_v2_server_activity_update_profile from "./routes/api/v2/server/activity/update/profile.ts" -import * as $api_v2_server_activity_update_text from "./routes/api/v2/server/activity/update/text.ts" -import * as $api_v2_server_blocked from "./routes/api/v2/server/blocked.ts" -import * as $api_v2_server_info from "./routes/api/v2/server/info.ts" -import * as $api_v2_server_information_talk_ID_image from "./routes/api/v2/server/information/talk/[ID]/image.ts" -import * as $api_v2_server_information_talk_ID_index from "./routes/api/v2/server/information/talk/[ID]/index.ts" -import * as $api_v2_server_information_users_icon from "./routes/api/v2/server/information/users/icon.ts" -import * as $api_v2_server_information_users_profile from "./routes/api/v2/server/information/users/profile.ts" -import * as $api_v2_server_pubkey from "./routes/api/v2/server/pubkey.ts" -import * as $index from "./routes/index.tsx" -import * as $ChatSend from "./islands/ChatSend.tsx" -import * as $ChatTalkContent from "./islands/ChatTalkContent.tsx" -import * as $ChatTalkTitle from "./islands/ChatTalkTitle.tsx" -import * as $ChatTalkTitleContent from "./islands/ChatTalkTitleContent.tsx" -import * as $TalkListContent from "./islands/TalkListContent.tsx" -import * as $headerButton from "./islands/headerButton.tsx" -import * as $setDefaultState from "./islands/setDefaultState.tsx" -import * as $talkListHeader from "./islands/talkListHeader.tsx" -import { type Manifest } from "$fresh/server.ts" +import * as $_404 from "./routes/_404.tsx"; +import * as $_app from "./routes/_app.tsx"; +import * as $_middleware from "./routes/_middleware.ts"; +import * as $api_v2_client_block_server from "./routes/api/v2/client/block/server.ts"; +import * as $api_v2_client_block_user from "./routes/api/v2/client/block/user.ts"; +import * as $api_v2_client_create_community from "./routes/api/v2/client/create/community.ts"; +import * as $api_v2_client_create_group from "./routes/api/v2/client/create/group.ts"; +import * as $api_v2_client_csrftoken from "./routes/api/v2/client/csrftoken.ts"; +import * as $api_v2_client_friends_info_ID_icon_friend from "./routes/api/v2/client/friends/info/[ID]/icon/friend.ts"; +import * as $api_v2_client_friends_info_ID_icon_friendcode from "./routes/api/v2/client/friends/info/[ID]/icon/friendcode.ts"; +import * as $api_v2_client_friends_info_ID_icon_group from "./routes/api/v2/client/friends/info/[ID]/icon/group.ts"; +import * as $api_v2_client_friends_info_ID_profile_friend from "./routes/api/v2/client/friends/info/[ID]/profile/friend.ts"; +import * as $api_v2_client_friends_info_ID_profile_friendcode from "./routes/api/v2/client/friends/info/[ID]/profile/friendcode.ts"; +import * as $api_v2_client_friends_info_ID_profile_group from "./routes/api/v2/client/friends/info/[ID]/profile/group.ts"; +import * as $api_v2_client_friends_list from "./routes/api/v2/client/friends/list.ts"; +import * as $api_v2_client_main from "./routes/api/v2/client/main.ts"; +import * as $api_v2_client_sessions_login from "./routes/api/v2/client/sessions/login.ts"; +import * as $api_v2_client_sessions_logout from "./routes/api/v2/client/sessions/logout.ts"; +import * as $api_v2_client_sessions_registers_auth from "./routes/api/v2/client/sessions/registers/auth.ts"; +import * as $api_v2_client_sessions_registers_check from "./routes/api/v2/client/sessions/registers/check.ts"; +import * as $api_v2_client_sessions_registers_temp from "./routes/api/v2/client/sessions/registers/temp.ts"; +import * as $api_v2_client_settings_icon from "./routes/api/v2/client/settings/icon.ts"; +import * as $api_v2_client_settings_nickname from "./routes/api/v2/client/settings/nickname.ts"; +import * as $api_v2_client_settings_privacy from "./routes/api/v2/client/settings/privacy.ts"; +import * as $api_v2_client_talks_community_audio from "./routes/api/v2/client/talks/community/audio.ts"; +import * as $api_v2_client_talks_community_image from "./routes/api/v2/client/talks/community/image.ts"; +import * as $api_v2_client_talks_community_text from "./routes/api/v2/client/talks/community/text.ts"; +import * as $api_v2_client_talks_community_update from "./routes/api/v2/client/talks/community/update.ts"; +import * as $api_v2_client_talks_community_video from "./routes/api/v2/client/talks/community/video.ts"; +import * as $api_v2_client_talks_delete from "./routes/api/v2/client/talks/delete.ts"; +import * as $api_v2_client_talks_friend_audio from "./routes/api/v2/client/talks/friend/audio.ts"; +import * as $api_v2_client_talks_friend_image from "./routes/api/v2/client/talks/friend/image.ts"; +import * as $api_v2_client_talks_friend_text from "./routes/api/v2/client/talks/friend/text.ts"; +import * as $api_v2_client_talks_friend_update from "./routes/api/v2/client/talks/friend/update.ts"; +import * as $api_v2_client_talks_friend_video from "./routes/api/v2/client/talks/friend/video.ts"; +import * as $api_v2_client_talks_group_audio from "./routes/api/v2/client/talks/group/audio.ts"; +import * as $api_v2_client_talks_group_image from "./routes/api/v2/client/talks/group/image.ts"; +import * as $api_v2_client_talks_group_text from "./routes/api/v2/client/talks/group/text.ts"; +import * as $api_v2_client_talks_group_update from "./routes/api/v2/client/talks/group/update.ts"; +import * as $api_v2_client_talks_group_video from "./routes/api/v2/client/talks/group/video.ts"; +import * as $api_v2_client_talks_read from "./routes/api/v2/client/talks/read.ts"; +import * as $api_v2_client_unblock_server from "./routes/api/v2/client/unblock/server.ts"; +import * as $api_v2_client_unblock_user from "./routes/api/v2/client/unblock/user.ts"; +import * as $api_v2_client_users_uuid_icon from "./routes/api/v2/client/users/[uuid]/icon.ts"; +import * as $api_v2_client_users_icon from "./routes/api/v2/client/users/icon.ts"; +import * as $api_v2_client_users_profile from "./routes/api/v2/client/users/profile.ts"; +import * as $api_v2_client_users_settings from "./routes/api/v2/client/users/settings.ts"; +import * as $api_v2_client_welcome from "./routes/api/v2/client/welcome.ts"; +import * as $api_v2_server_activity_accept_community from "./routes/api/v2/server/activity/accept/community.ts"; +import * as $api_v2_server_activity_accept_friend from "./routes/api/v2/server/activity/accept/friend.ts"; +import * as $api_v2_server_activity_accept_group from "./routes/api/v2/server/activity/accept/group.ts"; +import * as $api_v2_server_activity_block_user from "./routes/api/v2/server/activity/block/user.ts"; +import * as $api_v2_server_activity_delete_message from "./routes/api/v2/server/activity/delete/message.ts"; +import * as $api_v2_server_activity_flag_community from "./routes/api/v2/server/activity/flag/community.ts"; +import * as $api_v2_server_activity_flag_group from "./routes/api/v2/server/activity/flag/group.ts"; +import * as $api_v2_server_activity_flag_user from "./routes/api/v2/server/activity/flag/user.ts"; +import * as $api_v2_server_activity_ignore_friend from "./routes/api/v2/server/activity/ignore/friend.ts"; +import * as $api_v2_server_activity_ignore_group from "./routes/api/v2/server/activity/ignore/group.ts"; +import * as $api_v2_server_activity_invite_group from "./routes/api/v2/server/activity/invite/group.ts"; +import * as $api_v2_server_activity_join_community from "./routes/api/v2/server/activity/join/community.ts"; +import * as $api_v2_server_activity_read_message from "./routes/api/v2/server/activity/read/message.ts"; +import * as $api_v2_server_activity_request_community from "./routes/api/v2/server/activity/request/community.ts"; +import * as $api_v2_server_activity_request_friend from "./routes/api/v2/server/activity/request/friend.ts"; +import * as $api_v2_server_activity_talk_audio from "./routes/api/v2/server/activity/talk/audio.ts"; +import * as $api_v2_server_activity_talk_image from "./routes/api/v2/server/activity/talk/image.ts"; +import * as $api_v2_server_activity_talk_text from "./routes/api/v2/server/activity/talk/text.ts"; +import * as $api_v2_server_activity_talk_video from "./routes/api/v2/server/activity/talk/video.ts"; +import * as $api_v2_server_activity_update_profile from "./routes/api/v2/server/activity/update/profile.ts"; +import * as $api_v2_server_activity_update_text from "./routes/api/v2/server/activity/update/text.ts"; +import * as $api_v2_server_blocked from "./routes/api/v2/server/blocked.ts"; +import * as $api_v2_server_info from "./routes/api/v2/server/info.ts"; +import * as $api_v2_server_information_talk_ID_image from "./routes/api/v2/server/information/talk/[ID]/image.ts"; +import * as $api_v2_server_information_talk_ID_index from "./routes/api/v2/server/information/talk/[ID]/index.ts"; +import * as $api_v2_server_information_users_icon from "./routes/api/v2/server/information/users/icon.ts"; +import * as $api_v2_server_information_users_profile from "./routes/api/v2/server/information/users/profile.ts"; +import * as $api_v2_server_pubkey from "./routes/api/v2/server/pubkey.ts"; +import * as $index from "./routes/index.tsx"; +import * as $ChatSend from "./islands/ChatSend.tsx"; +import * as $ChatTalkContent from "./islands/ChatTalkContent.tsx"; +import * as $ChatTalkTitle from "./islands/ChatTalkTitle.tsx"; +import * as $ChatTalkTitleContent from "./islands/ChatTalkTitleContent.tsx"; +import * as $TalkListContent from "./islands/TalkListContent.tsx"; +import * as $headerButton from "./islands/headerButton.tsx"; +import * as $setDefaultState from "./islands/setDefaultState.tsx"; +import * as $talkListHeader from "./islands/talkListHeader.tsx"; +import { type Manifest } from "$fresh/server.ts"; const manifest = { routes: { @@ -105,13 +115,23 @@ const manifest = { "./routes/api/v2/client/settings/icon.ts": $api_v2_client_settings_icon, "./routes/api/v2/client/settings/nickname.ts": $api_v2_client_settings_nickname, "./routes/api/v2/client/settings/privacy.ts": $api_v2_client_settings_privacy, + "./routes/api/v2/client/talks/community/audio.ts": $api_v2_client_talks_community_audio, + "./routes/api/v2/client/talks/community/image.ts": $api_v2_client_talks_community_image, + "./routes/api/v2/client/talks/community/text.ts": $api_v2_client_talks_community_text, + "./routes/api/v2/client/talks/community/update.ts": $api_v2_client_talks_community_update, + "./routes/api/v2/client/talks/community/video.ts": $api_v2_client_talks_community_video, "./routes/api/v2/client/talks/delete.ts": $api_v2_client_talks_delete, + "./routes/api/v2/client/talks/friend/audio.ts": $api_v2_client_talks_friend_audio, + "./routes/api/v2/client/talks/friend/image.ts": $api_v2_client_talks_friend_image, + "./routes/api/v2/client/talks/friend/text.ts": $api_v2_client_talks_friend_text, + "./routes/api/v2/client/talks/friend/update.ts": $api_v2_client_talks_friend_update, + "./routes/api/v2/client/talks/friend/video.ts": $api_v2_client_talks_friend_video, + "./routes/api/v2/client/talks/group/audio.ts": $api_v2_client_talks_group_audio, + "./routes/api/v2/client/talks/group/image.ts": $api_v2_client_talks_group_image, + "./routes/api/v2/client/talks/group/text.ts": $api_v2_client_talks_group_text, + "./routes/api/v2/client/talks/group/update.ts": $api_v2_client_talks_group_update, + "./routes/api/v2/client/talks/group/video.ts": $api_v2_client_talks_group_video, "./routes/api/v2/client/talks/read.ts": $api_v2_client_talks_read, - "./routes/api/v2/client/talks/sending/audio.ts": $api_v2_client_talks_sending_audio, - "./routes/api/v2/client/talks/sending/image.ts": $api_v2_client_talks_sending_image, - "./routes/api/v2/client/talks/sending/text.ts": $api_v2_client_talks_sending_text, - "./routes/api/v2/client/talks/sending/update.ts": $api_v2_client_talks_sending_update, - "./routes/api/v2/client/talks/sending/video.ts": $api_v2_client_talks_sending_video, "./routes/api/v2/client/unblock/server.ts": $api_v2_client_unblock_server, "./routes/api/v2/client/unblock/user.ts": $api_v2_client_unblock_user, "./routes/api/v2/client/users/[uuid]/icon.ts": $api_v2_client_users_uuid_icon, @@ -160,6 +180,6 @@ const manifest = { "./islands/talkListHeader.tsx": $talkListHeader, }, baseUrl: import.meta.url, -} satisfies Manifest +} satisfies Manifest; -export default manifest +export default manifest; diff --git a/islands/ChatTalkContent.tsx b/islands/ChatTalkContent.tsx index ad1311f6..e9794c12 100644 --- a/islands/ChatTalkContent.tsx +++ b/islands/ChatTalkContent.tsx @@ -139,5 +139,19 @@ function ChatTalkMain({ state }: { state: AppStateType }) { ); } - -export default ChatTalkMain; +function ChatTalk({ state }: { state: AppStateType }) { + if (state.isChoiceUser.value === true) { + return ( + + ); + } else { + return ( +
+

友達を選択してください

+
+ ); + } +} +export default ChatTalk; diff --git a/islands/ChatTalkTitleContent.tsx b/islands/ChatTalkTitleContent.tsx index 16c0c7b7..369fc48a 100644 --- a/islands/ChatTalkTitleContent.tsx +++ b/islands/ChatTalkTitleContent.tsx @@ -1,3 +1,4 @@ -export default function ChatTalkTitleContent(props: { children: string }) { - return

{props.children}

; +import { AppStateType } from "../util/types.ts"; +export default function ChatTalkTitleContent(props: { state: AppStateType }) { + return

{props.state.roomName.value}

; } diff --git a/islands/TalkListContent.tsx b/islands/TalkListContent.tsx index 046eff88..3deaa59b 100644 --- a/islands/TalkListContent.tsx +++ b/islands/TalkListContent.tsx @@ -1,4 +1,5 @@ import User from "../components/User.tsx"; +import { setIschoiseUser } from "../util/takosClient.ts"; import { AppStateType } from "../util/types.ts"; function TalkListContent({ state }: { state: AppStateType }) { if (state.page.value === 0) { @@ -15,6 +16,29 @@ function TalkListContent({ state }: { state: AppStateType }) { userName2={talk.userName} isNewMessage={talk.isNewMessage} isSelected={talk.isSelect} + onClick={() => { + setIschoiseUser(true, state.isChoiceUser); + state.roomid.value = talk.roomID; + state.roomName.value = talk.roomName; + console.log(talk.roomName); + state.friendList.value.map((data: any) => { + if (data.roomID == talk.roomID) { + data.isNewMessage = false; + } + }); + //urlの一番最後にroomidを追加 + //どのようなurlにも対応できるようにする + const url = new URL(window.location.href); + url.searchParams.set("roomid", talk.roomID); + window.history.pushState({}, "", url.toString()); + state.ws.value?.send( + JSON.stringify({ + type: "join", + sessionid: state.sessionid.value, + roomid: talk.roomID, + }), + ); + }} /> ); })} diff --git a/islands/setDefaultState.tsx b/islands/setDefaultState.tsx index 3296a3ed..1e97719c 100644 --- a/islands/setDefaultState.tsx +++ b/islands/setDefaultState.tsx @@ -28,5 +28,15 @@ export default function setDefaultState({ state }: { state: AppStateType }) { state.isValidInput.value = false; } }, [state.inputMessage.value]); + useEffect(() => { + state.ws.value = new WebSocket("/api/v2/client/main"); + state.ws.value.onmessage = (event: any) => { + const data = JSON.parse(event.data); + console.log(data); + }; + state.ws.value.onopen = () => { + console.log("connected"); + }; + }, []); return <>; } diff --git a/routes/api/v2/client/main.ts b/routes/api/v2/client/main.ts index 91cbd30d..9f86add3 100644 --- a/routes/api/v2/client/main.ts +++ b/routes/api/v2/client/main.ts @@ -1,10 +1,13 @@ import { getCookies } from "$std/http/cookie.ts"; import ssessionID from "../../../../models/sessionid.ts"; import users from "../../../../models/users.ts"; +import rooms from "../../../../models/rooms.ts"; import redis from "redis"; import pubClient from "../../../../util/redisClient.ts"; -import { WebSocketSessionObject } from "../../../../util/types.ts"; +import { WebSocketJoiningFriend, WebSocketJoiningRoom, WebSocketSessionObject } from "../../../../util/types.ts"; import { load } from "$std/dotenv/mod.ts"; +import friends from "../../../../models/friends.ts"; +import takos from "../../../../util/takos.ts"; const env = await load(); const redisURL = env["REDIS_URL"]; const redisch = env["REDIS_CH"]; @@ -37,13 +40,15 @@ export const handler = { //sessionidを取得 const cookies = getCookies(req.headers); const sessionid = cookies.sessionid; - const isTrueSessionid = await ssessionID.findOne({ sessionid: sessionid }); + const isTrueSessionid = await ssessionID.findOne({ sessionID: sessionid }); if (!isTrueSessionid) { + console.log("Invalid SessionID", sessionid); socket.close(1000, "Invalid SessionID"); return; } const user = await users.findOne({ uuid: isTrueSessionid.userid }); if (!user) { + console.log("Invalid User"); socket.close(1000, "Invalid User"); return; } @@ -59,13 +64,73 @@ export const handler = { const data = JSON.parse(event.data); if (data.type === "ping") { socket.send(JSON.stringify({ type: "pong" })); + UpdateLastActivityTime(value.sessionid); + return; + } + if (data.type === "joinFriend") { + const value = data as WebSocketJoiningFriend; + const session = sessions.get(value.sessionid); + if (!session) { + socket.close(1000, "Invalid SessionID"); + return; + } + const friendId = value.friendid; + const friendList = await friends.findOne({ user: ctx.state.data.user.uuid}); + if (!friendList) { + socket.close(1000, "you have no friends"); + return; + } + const friend = friendList.friends.find((friend) => friend.userid === friendId); + if (!friend) { + socket.close(1000, "Invalid FriendID"); + return; + } + const roomid = friend.room; + const room = await rooms.findOne({ uuid: roomid }); + if (!room) { + socket.close(1000, "Invalid RoomID"); + return; + } + session.roomid = room.uuid; + session.roomType = room.types; + sessions.set(value.sessionid, session); + //ルームに参加したことを通知 + pubClient.publish(room.uuid, JSON.stringify({ type: "join", userid: session.userid })); + session.ws.send(JSON.stringify({ type: "joined", roomid: room.uuid })); + UpdateLastActivityTime(value.sessionid); + return; } - if (data.type === "join") { - const session = sessions.get(data.sessionid); + if (data.type === "joinRoom") { + const value = data as WebSocketJoiningRoom; + const session = sessions.get(value.sessionid); if (!session) { socket.close(1000, "Invalid SessionID"); return; } + const room = await rooms.findOne({ roomID: value.roomid }); + if (!room) { + socket.close(1000, "Invalid RoomID"); + return; + } + //個人ルームかどうかを確認 + if (room.types === "friend" || room.types === "remotefriend") { + socket.close(1000, "Invalid RoomID"); + return; + } + //ルームメンバーかどうかを確認 + const isRoomMember = room.users.find((user) => user.userid === session.userid); + if (!isRoomMember) { + socket.close(1000, "Invalid RoomID"); + return; + } + session.roomid = value.roomid; + session.roomType = room.types; + sessions.set(value.sessionid, session); + //ルームに参加したことを通知 + pubClient.publish(value.roomid, JSON.stringify({ type: "join", userid: session.userid })); + session.ws.send(JSON.stringify({ type: "joined", roomid: value.roomid })); + UpdateLastActivityTime(value.sessionid); + return; } }; socket.onclose = () => { @@ -78,7 +143,7 @@ export const handler = { }; // セッションの最後の活動時間を更新する関数 -function UpdateLastActivityTime(sessionId: string, Changes: Object) { +function UpdateLastActivityTime(sessionId: string) { const session = sessions.get(sessionId); if (!session) { return; diff --git a/routes/api/v2/client/talks/sending/audio.ts b/routes/api/v2/client/talks/community/audio.ts similarity index 100% rename from routes/api/v2/client/talks/sending/audio.ts rename to routes/api/v2/client/talks/community/audio.ts diff --git a/routes/api/v2/client/talks/sending/image.ts b/routes/api/v2/client/talks/community/image.ts similarity index 100% rename from routes/api/v2/client/talks/sending/image.ts rename to routes/api/v2/client/talks/community/image.ts diff --git a/routes/api/v2/client/talks/sending/text.ts b/routes/api/v2/client/talks/community/text.ts similarity index 100% rename from routes/api/v2/client/talks/sending/text.ts rename to routes/api/v2/client/talks/community/text.ts diff --git a/routes/api/v2/client/talks/sending/update.ts b/routes/api/v2/client/talks/community/update.ts similarity index 100% rename from routes/api/v2/client/talks/sending/update.ts rename to routes/api/v2/client/talks/community/update.ts diff --git a/routes/api/v2/client/talks/sending/video.ts b/routes/api/v2/client/talks/community/video.ts similarity index 100% rename from routes/api/v2/client/talks/sending/video.ts rename to routes/api/v2/client/talks/community/video.ts diff --git a/routes/api/v2/client/talks/friend/audio.ts b/routes/api/v2/client/talks/friend/audio.ts new file mode 100644 index 00000000..edf47348 --- /dev/null +++ b/routes/api/v2/client/talks/friend/audio.ts @@ -0,0 +1,4 @@ +//音声メッセージを送信 +// POST /api/v2/client/talks/sending/audio +// { audio: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/friend/image.ts b/routes/api/v2/client/talks/friend/image.ts new file mode 100644 index 00000000..bf9b3ae3 --- /dev/null +++ b/routes/api/v2/client/talks/friend/image.ts @@ -0,0 +1,4 @@ +//画像を送信 +// POST /api/v2/client/talks/sending/image +// { image: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/friend/text.ts b/routes/api/v2/client/talks/friend/text.ts new file mode 100644 index 00000000..03ba40c7 --- /dev/null +++ b/routes/api/v2/client/talks/friend/text.ts @@ -0,0 +1,4 @@ +//textメッセージを送信する +// POST /api/v2/client/talks/sending/text +// { text: string, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/friend/update.ts b/routes/api/v2/client/talks/friend/update.ts new file mode 100644 index 00000000..451baea4 --- /dev/null +++ b/routes/api/v2/client/talks/friend/update.ts @@ -0,0 +1,4 @@ +//textメッセージを編集する +// POST /api/v2/client/talks/sending/update +// { text: string, csrftoken: string, roomid: string, channel: string, messageid: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/friend/video.ts b/routes/api/v2/client/talks/friend/video.ts new file mode 100644 index 00000000..824d8b90 --- /dev/null +++ b/routes/api/v2/client/talks/friend/video.ts @@ -0,0 +1,4 @@ +//動画を送信するapi +// POST /api/v2/client/talks/sending/video +// { video: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/group/audio.ts b/routes/api/v2/client/talks/group/audio.ts new file mode 100644 index 00000000..edf47348 --- /dev/null +++ b/routes/api/v2/client/talks/group/audio.ts @@ -0,0 +1,4 @@ +//音声メッセージを送信 +// POST /api/v2/client/talks/sending/audio +// { audio: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/group/image.ts b/routes/api/v2/client/talks/group/image.ts new file mode 100644 index 00000000..bf9b3ae3 --- /dev/null +++ b/routes/api/v2/client/talks/group/image.ts @@ -0,0 +1,4 @@ +//画像を送信 +// POST /api/v2/client/talks/sending/image +// { image: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/group/text.ts b/routes/api/v2/client/talks/group/text.ts new file mode 100644 index 00000000..03ba40c7 --- /dev/null +++ b/routes/api/v2/client/talks/group/text.ts @@ -0,0 +1,4 @@ +//textメッセージを送信する +// POST /api/v2/client/talks/sending/text +// { text: string, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/group/update.ts b/routes/api/v2/client/talks/group/update.ts new file mode 100644 index 00000000..451baea4 --- /dev/null +++ b/routes/api/v2/client/talks/group/update.ts @@ -0,0 +1,4 @@ +//textメッセージを編集する +// POST /api/v2/client/talks/sending/update +// { text: string, csrftoken: string, roomid: string, channel: string, messageid: string } +// -> { status: boolean, message: string } diff --git a/routes/api/v2/client/talks/group/video.ts b/routes/api/v2/client/talks/group/video.ts new file mode 100644 index 00000000..824d8b90 --- /dev/null +++ b/routes/api/v2/client/talks/group/video.ts @@ -0,0 +1,4 @@ +//動画を送信するapi +// POST /api/v2/client/talks/sending/video +// { video: file, csrftoken: string, roomid: string, channel: string } +// -> { status: boolean, message: string } diff --git a/util/takos.ts b/util/takos.ts index 6294d4df..d65e1536 100644 --- a/util/takos.ts +++ b/util/takos.ts @@ -137,23 +137,6 @@ const takos = { } return true; }, - setIschoiseUser: (ischoiseUser: boolean, obj: any) => { - const headerElement = document.getElementById("header"); - const chatmainElement = document.getElementById("chatmain"); - if (chatmainElement === null || headerElement === null) { - return; - } - if (ischoiseUser) { - //"l-header is-inview" : "l-header" - //isChoiceUser ? "p-talk is-inview" : "p-talk" - headerElement.className = "l-header is-inview"; - chatmainElement.className = "p-talk is-inview"; - } else { - headerElement.className = "l-header"; - chatmainElement.className = "p-talk"; - } - obj.value = ischoiseUser; - }, }; export default takos; async function importCryptoKey(keyData: string | undefined): Promise { diff --git a/util/takosClient.ts b/util/takosClient.ts new file mode 100644 index 00000000..4229a7b9 --- /dev/null +++ b/util/takosClient.ts @@ -0,0 +1,25 @@ +// Cache the elements outside the function if they are used multiple times throughout the app +let headerElement: HTMLElement | null; +let chatmainElement: HTMLElement | null; +let chatHeaderElement: HTMLElement | null; + +export const setIschoiseUser = (ischoiseUser: boolean, obj: any) => { + if (!headerElement || !chatmainElement || !chatHeaderElement) { + headerElement = document.getElementById("header"); + chatmainElement = document.getElementById("chatmain"); + chatHeaderElement = document.getElementById("chatHeader"); + } + if (ischoiseUser) { + headerElement?.classList.add("is-inview"); + chatmainElement?.classList.add("is-inview"); + chatHeaderElement?.classList.remove("hidden"); + } else { + headerElement?.classList.remove("is-inview"); + chatmainElement?.classList.remove("is-inview"); + chatHeaderElement?.classList.add("hidden"); + } + // Only update obj.value if necessary + if (obj.value !== ischoiseUser) { + obj.value = ischoiseUser; + } +}; diff --git a/util/types.ts b/util/types.ts index 89fede29..89c7e214 100644 --- a/util/types.ts +++ b/util/types.ts @@ -59,3 +59,13 @@ export interface WebSocketSessionObject { roomType: string; lastActivityTime: Date; } +export interface WebSocketJoiningRoom { + type: string; + sessionid: string; + roomid: string; +} +export interface WebSocketJoiningFriend { + type: string; + sessionid: string; + friendid: string; +}