This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

156 lines
7.6 KiB
Go

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// 眼界 (Tuite) — the phone's short-video / Twitter-like app.
// Why this file exists: the panel opens but every list is empty, because all of them are filters
// over one server-owned list and nothing ever filled it. SocialNetWorkUtils.lua reads
// gPlayerManager.infoMinor.bindData.playerTuiteInfo.TuiteList from six places —
// GetRecommendList:143, GetExploreTuiteList:400, GetFollowList:431, GetTuiteListByPubisher:445,
// GetCollectionList:1687, GetLocalTuiteList:3046 — and GetTuiteInfo(v) then resolves the
// body with LTConfig.TuiteConfig.GetConfig(v.CfgId). The list itself is published in the
// login frame (see RuntimePayloadFactory), so the app is populated on entry; what is left is the
// interaction half, which is one INVOKE per gesture.
// The server only names the post instance. Text, images, area and author all come from
// tables the client already has (TuiteConfig 204 rows / TuiteCommentConfig 1031 rows /
// TuiteNPCConfig 562 rows) — see TuiteCatalog4229938.
// ⛑ Return framing is taken from the client's own reader, never guessed:
// 63653286 AskTuiteGetDetail -> struct Reader[348]
// 63950672 AskTuiteGetDetailByConfigId -> struct Reader[348]
// 63989368 AskInteractTuite -> struct Reader[348]
// 63477523 AskTuiteGetCommentList -> struct Reader[620]
// 63242664 AskTuiteLikeComment -> struct Reader[605]
// 63264230 AskTuiteGetTimelineData -> complex Reader[608] (0xFF + u32 + string)
// 63241162 / 63029158 / 63801315 -> void
// A wrong shape does not throw — it desynchronises the client's reader of the reply and silently
// drops the callback, so each handler below returns exactly the shape above even when empty.
// ⛑ HasTimeline is never set: the blob PlayMultiVideo wants is one the client
// authors and uploads (AskTuiteUpdateTimelineInfo, 102400-byte limit), so there is no server-side
// copy of the five video posts' data. Marking them true would make the client request a blob we
// cannot serve; leaving it false costs only the video.
//
//
// Projects a catalogue post into the wire row. Shared by the detail handlers so the numbers on
// a detail page always match the row it was opened from.
//
func GameRouter_Tuite_BuildTuiteInfo(ctx context.Context, post any, session *GameSession) any {
// Router implementation for GameRouter_Tuite_BuildTuiteInfo
var zero any; return zero
}
func GameRouter_Tuite_BuildTuiteComment(ctx context.Context, comment any, index int64) any {
// Router implementation for GameRouter_Tuite_BuildTuiteComment
var zero any; return zero
}
// Reads the leading u32 of a request body (every Tuite request starts with an id).
func GameRouter_Tuite_TuiteRequestId(ctx context.Context, msg any) uint32 {
// Router implementation for GameRouter_Tuite_TuiteRequestId
return 0
}
// =================================================================================
// Detail — what tapping a row opens
//
// GetSocialNetworkDetail (SocialNetWorkUtils.lua:637) picks the request by whether the id is a
// config row: `if tuiteCfg then` -> AskTuiteGetDetailByConfigId, else AskTuiteGetDetail. Every
// id we publish is a TuiteConfig row, so in practice only the ByConfigId variant fires — the
// other one is implemented anyway because a player-published post takes that path.
// =================================================================================
func GameRouter_Tuite_AskTuiteGetDetailByConfigId(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteGetDetailByConfigId
var zero any; return zero
}
func GameRouter_Tuite_AskTuiteGetDetail(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteGetDetail
var zero any; return zero
}
func GameRouter_Tuite_ReturnTuiteDetailAsync(ctx context.Context, conn any, msg any, via string) any {
// Router implementation for GameRouter_Tuite_ReturnTuiteDetailAsync
var zero any; return zero
}
//
// AskInteractTuite(63989368) — (uint tuiteId, TuiteState interactType), 5 bytes.
// Like (8) and Favorite (16) are the two the panels actually send
// (SocialNetWorkUtils.lua:498 / :552). The reply is the updated row, and the client also edits
// its own copy in place (GetSeverTuiteInfoById), so the session set is what keeps the
// flag across a re-opened panel.
//
func GameRouter_Tuite_AskInteractTuite(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskInteractTuite
var zero any; return zero
}
//
// AskTuiteFollowRole(63241162) — (uint roleId), void return.
// The client marks the whole author's list itself on success
// (SocialNetWorkUtils.lua:610-625), so the server only has to answer; the set is kept anyway so
// a later detail request agrees with the local flag.
//
func GameRouter_Tuite_AskTuiteFollowRole(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteFollowRole
var zero any; return zero
}
// AskReportTuiteDetailOpened(63029158) — (uint tuiteId), void. Fired by YanjieNewDetailPagePanel.lua:165.
func GameRouter_Tuite_AskReportTuiteDetailOpened(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskReportTuiteDetailOpened
var zero any; return zero
}
//
// AskTuiteTakeReward(63801315) — (uint tuiteId), void.
// Only reachable when a row carries a non-zero DropId, which catalogue posts never do
// (the 领取 button is hidden without it), so this is a safety net for a hand-edited catalogue.
//
func GameRouter_Tuite_AskTuiteTakeReward(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteTakeReward
var zero any; return zero
}
// =================================================================================
// Comments
//
// The list page's comment count comes from the client (GetYanjieCommentCount falls back to
// #TuiteConfig.Comment), so this handler is what fills the comment section itself. Author
// identity is the only thing the server owns down here — the text is TuiteCommentConfig's.
// =================================================================================
// AskTuiteGetCommentList(63477523) — (uint tuiteId, int page, int pageSize), 12 bytes.
func GameRouter_Tuite_AskTuiteGetCommentList(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteGetCommentList
var zero any; return zero
}
//
// AskTuiteLikeComment(63242664) — (uint tuiteId, uint commentId, bool isLike), struct Reader[605].
// Per-session only; there is no counter to move because TuiteCommentConfig carries no likes.
//
func GameRouter_Tuite_AskTuiteLikeComment(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteLikeComment
var zero any; return zero
}
// =================================================================================
// Timeline — deliberately empty
//
// AskTuiteGetTimelineData(63264230) -> complex Reader[608] { uint Id, string TimelineData }.
// Reachable only when a row is published with HasTimeline, which never happens (see the header),
// so the honest answer is an empty blob rather than an invented one — an empty string makes
// PlayMultiVideo a no-op instead of feeding it fabricated data.
// =================================================================================
func GameRouter_Tuite_AskTuiteGetTimelineData(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Tuite_AskTuiteGetTimelineData
var zero any; return zero
}