1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using System.Net;
- using System.Net.Sockets;
- namespace ET.Client
- {
- public static class LoginHelper
- {
- public static async ETTask<int> Login(string ip, int port, string roomToken)
- {
- Scene clientScene = ClientSceneManagerComponent.Instance.Get( 1 );
- if( clientScene == null )
- {
- Log.Error( "Not found client scene" );
- return ErrorCode.ERR_SystemError;
- }
- try
- {
- // 创建一个ETModel层的Session
- clientScene.RemoveComponent<RouterAddressComponent>();
- clientScene.RemoveComponent<NetClientComponent>();
- clientScene.RemoveComponent<SessionComponent>();
- // 获取路由跟realmDispatcher地址
- var routerAddressComponent = clientScene.AddComponent<RouterAddressComponent, string, int>(ip, port);
- await routerAddressComponent.Init();
- clientScene.AddComponent<NetClientComponent, AddressFamily, NetworkProtocol>(
- routerAddressComponent.RouterManagerIPAddress.AddressFamily,
- NetworkProtocol.KCP
- );
- //如果有多个软路由地址,则通过roomid弄点花样模拟随机获取一个地址
- IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(roomToken ?? "1");
- // 登陆验证
- R2C_Login r2CLogin;
- using (Session session = clientScene.GetComponent<NetClientComponent>().Create(realmAddress))
- // using (Session session = await RouterHelper.CreateRouterSession(clientScene, realmAddress))
- {
- r2CLogin = (R2C_Login)await session.Call(new C2R_Login() );
- }
- if (r2CLogin.Error != ErrorCode.ERR_Success)
- {
- Log.Error($"登陆验证错误...errCode={r2CLogin.Error}");
- return r2CLogin.Error;
- }
- // 创建一个gate Session,并且保存到SessionComponent中
- Session gateSession = clientScene.GetComponent<NetClientComponent>().Create(NetworkHelper.ToIPEndPoint(r2CLogin.Address[0]));
- // Session gateSession = await RouterHelper.CreateRouterSession(clientScene, NetworkHelper.ToIPEndPoint(r2CLogin.Address[0]));
- // 登陆gate
- G2C_LoginGame g2CLoginGate = (G2C_LoginGame)await gateSession.Call(new C2G_LoginGame() { Token = roomToken ?? "" });
- if (g2CLoginGate.Error != ErrorCode.ERR_Success)
- {
- Log.Error($"登陆game错误...errCode={g2CLoginGate.Error}");
- return g2CLoginGate.Error;
- }
- // 保存账号信息
- gateSession.AddComponent<PingComponent>();
- clientScene.AddComponent<SessionComponent>().Session = gateSession;
- var player = clientScene.GetComponent<PlayerComponent>();
- player.PlayerId = g2CLoginGate.Player.id;
- var ret = (G2C_BindPlayer)await gateSession.Call(new C2G_BindPlayer() { PlayerId = player.PlayerId });
- EnterMapHelper.EnterMapAsync(clientScene, ret.Player, ret.Player.instanceId).Coroutine();
- }
- catch (Exception e)
- {
- Log.Error($"登陆出错...{e.Message}");
- return ErrorCode.ERR_LoginError;
- }
- return ErrorCode.ERR_Success;
- }
- }
- }
|