Files
2026-03-05 11:39:06 +08:00

108 lines
3.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using Fantasy;
using Fantasy.Async;
using Fantasy.ConfigTable;
using Fantasy.Network;
using UnityEngine;
using UnityEngine.UI;
using ErrorCode = UnityEditor.PackageManager.ErrorCode;
public class Entry : MonoBehaviour
{
private Scene _scene;
private Session _session;
public Button GameInitCompleteButton;
public Button StartCreateItemButton;
public Button UseItemButton;
public InputField UseItemId;
void Start()
{
StartAsync().Coroutine();
}
private async FTask StartAsync()
{
// 第一个参数,主要是为了兼容不容包管理器的路径
// Yoo、Addressable
// 路径 + 包名字 = 完整的路径
// Assets/Bundles/Config + Config.bytes = Assets/Bundles/Config/Config.bytes
ConfigTableHelper.Initialize("Assets/Bundles/Config", new AssetsBundleManager());
// 初始化框架
await Fantasy.Platform.Unity.Entry.Initialize(GetType().Assembly);
// 创建一个Scene这个Scene代表一个客户端的场景客户端的所有逻辑都可以写这里
// 如果有自己的框架也可以就单纯拿这个Scene做网络通讯也没问题。
_scene = await Scene.Create(SceneRuntimeType.MainThread);
// 用当前的Scene创建一个新的网络连接
_session = _scene.Connect(
"127.0.0.1:20000",
NetworkProtocolType.KCP,
OnConnectComplete,
OnConnectFail,
OnConnectDisconnect,
false, 5000);
var response = (G2C_LoginResponse)await _session.Call(new C2G_LoginRequest()
{
UserName = "Fantasy6666",PassWord = "666"
});
if (response.ErrorCode != 0)
{
Log.Error($"登陆失败,错误码 = {response.ErrorCode}");
return;
}
Log.Debug("收到G2C_TestResponse UserName:\"Fantasy\"");
GameInitCompleteButton.onClick.AddListener(() => OnGameInitCompleteButton().Coroutine());
StartCreateItemButton.onClick.AddListener(OnStartCreateItemButton);
UseItemButton.onClick.AddListener(() => OnUseItemButton().Coroutine());
}
private async FTask OnUseItemButton()
{
var itemId = long.Parse(UseItemId.text);
var response = await _session.Call(new C2G_UseItemRequest()
{
ItemId = itemId, Count = 1, ContainerType = 1
});
if (response.ErrorCode != 0)
{
Log.Error($"无法使用物品 ErrorCode:{response.ErrorCode}");
}
}
private async FTask OnGameInitCompleteButton()
{
var response = await _session.Call(new C2G_GameInitCompleteRequest()
{
PushContainer = true
});
if (response.ErrorCode != 0)
{
Log.Error($"无法跟服务器建立连接 ErrorCode:{response.ErrorCode}");
}
}
private void OnStartCreateItemButton()
{
_session.Send(new C2G_StartCreateItem());
}
private void OnConnectComplete()
{
Log.Debug("OnConnectComplete");
_session.AddComponent<SessionHeartbeatComponent>().Start(ConstValue.Heartbeat);
}
private void OnConnectFail()
{
Log.Debug("OnConnectFail");
}
private void OnConnectDisconnect()
{
Log.Debug("OnConnectDisconnect");
}
}