239 lines
6.9 KiB
C#
Raw Permalink Normal View History

2025-05-18 01:04:31 +08:00
// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2021-12-09
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "InviteProxy" company="Kunpo"></copyright>
// <summary></summary>
// ***********************************************************************
using F;
using F.Network;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace G
{
/// <summary>
/// 邀请
/// </summary>
public class InviteProxy : F.GameProxy
{
public class FriendInfo
{
public string userId;
public string nickName;
public string avatarUrl;
public int inviteTimestamp;
}
#region Field
private int _obInviteCount;
#endregion
#region Property
/// <summary>
///
/// </summary>
public int inviteCount => _obInviteCount;
public ActivityInfo inviteActivty => ActivityProxy.Instance.GetActivity(701);
public readonly List<FriendInfo> friendInfos = new List<FriendInfo>();
#endregion
#region Method
#endregion
#region Invite
public void InviteShare(Callback2 callback)
{
var inviteInfo = new KPlatform.InviteInfo
{
type = "invite1",
userId = UserProxy.UserId
};
ShareProxy.Instance.ShareAppWithInvite(inviteInfo.ToString());
}
public void GetInviteCount(Callback2 callback)
{
ServerProxy.Instance.GetInviteCount(callback);
}
public void GetInviteList(Callback2 callback)
{
ServerProxy.Instance.GetInviteList(callback);
}
public void GetRewards(ActivityInfo activityInfo, Callback2 callback)
{
var activity = inviteActivty;
if (activity != null)
{
if (activity.status == 0)
{
bool completed = true;
foreach (var subInfo in activity.subInfos)
{
if (subInfo.status == 0)
{
completed = false;
break;
}
}
if (completed)
activity.status = 1;
}
if (activity.status == 1)
{
activity.status = 2;
ActivityProxy.Instance.SaveActivity(activity);
RewardProxy.Instance.GetRewardsWithUI(activity.rewardInfos, callback);
}
else if (activity.status == 0)
callback?.Invoke(1, "未完成");
else
callback?.Invoke(2, "已领取");
}
}
public void GetRewards(ActivitySubInfo subInfo, Callback2 callback)
{
var activity = inviteActivty;
if (activity != null)
{
if (subInfo.status == 1)
{
subInfo.status = 2;
ActivityProxy.Instance.SaveActivity(activity);
RewardProxy.Instance.GetRewardsWithUI(subInfo.rewardInfos, callback);
}
else if (subInfo.status == 0)
callback?.Invoke(1, $"还需邀请{subInfo.maxValue - subInfo.curValue}人");
else
callback?.Invoke(2, "已领取");
}
}
public void UpdateActivty()
{
var activtyInfo = this.inviteActivty;
if (activtyInfo == null)
return;
var subInfos = activtyInfo.subInfos;
foreach (var subInfo in subInfos)
{
if (subInfo.status == 0)
{
subInfo.curValue = _obInviteCount;
if (subInfo.curValue >= subInfo.maxValue)
{
subInfo.status = 1;
//foreach (var subInfo2 in subInfos)
//{
// if (subInfo2.status == 2)
// subInfo2.status = 1;
//}
break;
}
}
}
activtyInfo.curValue = 0;
if (activtyInfo.status == 0)
{
foreach (var subInfo in subInfos)
{
if (subInfo.status > 0)
{
activtyInfo.curValue += 1;
}
}
}
else
{
activtyInfo.curValue = activtyInfo.maxValue;
}
ActivityProxy.Instance.SaveActivity(activtyInfo);
}
#endregion
#region Unity && Proxy
/// <summary>
///
/// </summary>
public static InviteProxy Instance => GetInstance<InviteProxy>();
/// <summary>
///
/// </summary>
public override void InitCompleted()
{
KFramework.GameFacade.RegisterResp(GlobalDefine.PACKET_ID_GET_INVITE_COUNT, this);
}
public override void ReadArchive()
{
}
public override void Recv(IPacket packet)
{
var gp = packet as GamePacket;
if (gp.error != GamePacket.ERROR_CODE_OK)
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, gp.data as string);
return;
}
if (gp.id == GlobalDefine.PACKET_ID_GET_INVITE_LIST)
{
friendInfos.Clear();
IList<object> inviteList = gp.data as IList<object>;
if (inviteList != null)
{
for (int i = 0; i < inviteList.Count; i++)
{
var dict = inviteList.GetDictionary(i);
if (dict != null)
friendInfos.Add(new FriendInfo
{
userId = dict.GetString("userid"),
nickName = dict.GetString("nickname"),
avatarUrl = dict.GetString("avatar"),
inviteTimestamp = dict.GetInt("invit_time"),
});
}
}
}
else
{
#if UNITY_EDITOR
_obInviteCount += 1;
#else
_obInviteCount = (int)packet.data;
#endif
UpdateActivty();
Debug.Log("InviteCount" + _obInviteCount);
}
}
#endregion
}
}