Exemple #1
0
    void onLogin(NetworkMessage msg)
    {
        Log.i("LanClient onLogin", Log.Tag.Net);
        SCLogin m = msg.ReadMessage <SCLogin> ();

        unitMgr.accountId = m.accountId;
        EventMgr.single.SendEvent("Game.Login");
    }
Exemple #2
0
    void onConnected(NetworkMessage msg)
    {
        msg.conn.SetMaxDelay(0.01f);
        //加载对应的账号数据
        Client nc = getClient(msg.conn, ACCOUNTID++);

        nc.init();
        Log.i("LanHost onConnected accountId=" + nc.accoundId + ",connecttionId=" + msg.conn.connectionId, Log.Tag.Net);
        //通知客户端登陆成功并返回账号ID
        SCLogin m = new SCLogin();

        m.accountId = nc.accoundId;
        sendTo(msg.conn.connectionId, (short)MyMsgId.Login, m);
    }
Exemple #3
0
    private void SCLogin(IMessage data)
    {
        SCLogin protocol = data as SCLogin;

        this.Notice(protocol.ResultCode);

        if (protocol.ResultCode == NoticeCode.LoginSucc)
        {
            this.login_key = protocol.LoginKey;
        }
        else if (protocol.ResultCode == NoticeCode.NotExistAccount)
        {
            EventDispatcher.GetInstance().DispatchEvent(EventType.Register);
        }
    }
Exemple #4
0
    private void CSLogin(object data, int connect_id)
    {
        CSLogin protocol = data as CSLogin;
        string  uid      = protocol.Uid;

        if (this.common_data.UidToPlayerlist.ContainsKey(uid))
        {
            SCPlayerList message = new SCPlayerList();
            message.PlayerList = this.common_data.UidToPlayerlist[uid];
            ServerSocket.Getinstance().SendMessage(message, connect_id);
        }
        else
        {
            SCLogin message = new SCLogin();
            message.Code = NoticeCode.NotExistPlayer;
            ServerSocket.Getinstance().SendMessage(message, connect_id);
        }
    }
Exemple #5
0
        public void OnLogin(SCLogin ret)
        {
            if (UUID != 0)
            {
                DEBUG.Error("Invalid HandeLogin UUID = {0}", UUID);
                return;
            }

            if (ret == null)
            {
                DEBUG.Error("Invalid Proto");
                return;
            }

            UUID = ret.UUID;

            PlayerManager.Instance.AddOne(this);

            DEBUG.Log("OnLogin:: UUID={0}", ret.UUID);
        }
Exemple #6
0
        void OnLogin(params object[] args)
        {
            MessageBody body = args[0] as MessageBody;

            if (body == null)
            {
                return;
            }

            SCLogin ret = ProtoSerialize.DeSerialize <SCLogin>(body.data);

            if (ret == null)
            {
                return;
            }

            Player instance = Instantiate <Player>(playerPrefab);

            instance.OnLogin(ret);
        }
Exemple #7
0
    public static void ConnectServerAndLogin()
    {
        lock (locker) {
            if (!IsConnected && !IsConnecting)
            {
                IsConnecting = true;

                Thread connectThread = new Thread(new ThreadStart(delegate() {
                    if (ConnectServer())
                    {
                        IsConnected       = true;
                        CSLogin node      = new CSLogin();
                        node.AccountId    = accountId;
                        node.Url          = "sdf";
                        node.Ip           = ip;
                        node.Localization = localization;
//						node.Ip = "10.0.2.2";
                        byte[] data      = CSLogin.SerializeToBytes(node);
                        byte[] loginData = SocketManager.SendMessageSync((int)AccountOpcode.CSLogin, data);
                        SCLogin scLogin  = SCLogin.Deserialize(loginData);
                        Debug.Log("login success,sessionId = " + scLogin.SessionId);
                        if (DateTime.Now.Ticks - scLogin.ServerTime < 3000)
                        {
                            Params.disFromServerTime = 0;
                        }
                        else
                        {
                            Params.disFromServerTime = (int)((Util.ConvertDateTimeToInt(DateTime.Now) - scLogin.ServerTime) / 1000);
                        }
                        Debug.Log("disFromServerTime = " + Params.disFromServerTime);
                        IsLogin = true;
                    }
                    IsConnecting = false;
                }));
                connectThread.IsBackground = true;
                connectThread.Start();
            }
        }
    }
Exemple #8
0
 void OnSCLogin(SCLogin msg)
 {
     GameMaster().SetMyId(msg.playerId);
 }
Exemple #9
0
    public override void Handle(IMessage data, int connect_id, int addition, List <int> player_id_list)
    {
        short msg_id = Protocol.GetMsgId(data);

        switch (msg_id)
        {
        //服务器注册到Route
        case MsgCode.SR_RegisterServer:
        {
            SRRegisterServer protocol      = data as SRRegisterServer;
            List <int>       scene_id_list = new List <int>();
            foreach (int scene_id in protocol.SceneIdList)
            {
                scene_id_list.Add(scene_id);
            }
            Server.GetInstance().RegisterServer(connect_id, protocol.ServerId, protocol.ServerType, scene_id_list);
            Server.GetInstance().DispatchToServer(connect_id);
        }
        break;

        //客户端登陆
        case MsgCode.CS_Login:
        {
            ServerInfo server_info = Server.GetInstance().GetServerInfoBySceneId(SceneId.LOGIN);
            if (server_info == null)
            {
                Log.Debug("CS_Login LoginScene Not Exist");
                return;
            }

            RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(connect_id);
            if (player != null)
            {
                if (!player.IsOriginState())
                {
                    Log.DebugFormat("CS_Login RouteRoleState Not OriginState UserId:{0} State:{1}", player.PlayerId, player.State);
                    return;
                }
            }
            else
            {
                player = new RoutePlayer(connect_id);
                Server.GetInstance().GetService <RouteService>().GetUserMgr().AddPlayerByConnectId(player);
            }

            //转发到登陆服验证账号信息
            player.AddState(RoutePlayerState.LOGINING);
            Server.GetInstance().GetSocket().SendToServer(data, server_info.ConnectId, connect_id, null);
        }
        break;

        //登陆服登陆结果返回
        case MsgCode.LR_LoginResult:
        {
            LRLoginResult protocol = data as LRLoginResult;
            SCLogin       message  = new SCLogin();

            RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(addition);
            if (protocol.ResultCode == NoticeCode.LoginSucc)
            {
                //登陆成功
                player.UserId   = protocol.UserId;
                player.LoginKey = this.CreateLoginKey();

                //切换成已登陆状态
                player.CancelState(RoutePlayerState.LOGINING);
                player.AddState(RoutePlayerState.LOGINED);

                message.LoginKey = player.LoginKey;
            }
            else
            {
                //登陆失败重置状态
                player.ResetState();
            }

            //登陆返回
            message.ResultCode = protocol.ResultCode;
            Server.GetInstance().GetSocket().SendToClient(message, addition);
        }
        break;

        //玩家列表返回
        case MsgCode.SC_PlayerList:
        {
            RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(addition);
            player.SendMsg(data);
        }
        break;

        //创建玩家
        case MsgCode.CS_CreatePlayer:
        {
            CSCreatePlayer protocol = data as CSCreatePlayer;
            RoutePlayer    player   = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(connect_id);
            if (player == null || !player.CheckState(RoutePlayerState.LOGINED) || player.CheckState(RoutePlayerState.LOADED))
            {
                return;
            }

            protocol.UserId = player.UserId;
            ServerInfo server_info = Server.GetInstance().GetServerInfoBySceneId(SceneId.LOGIN);
            Server.GetInstance().GetSocket().SendToServer(protocol, server_info.ConnectId, connect_id, null);
        }
        break;

        //加载玩家
        case MsgCode.CS_LoadPlayer:
        {
            CSLoadPlayer protocol = data as CSLoadPlayer;
            RoutePlayer  player   = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(connect_id);
            if (player == null || !player.CheckState(RoutePlayerState.LOGINED) || player.CheckState(RoutePlayerState.LOADED))
            {
                return;
            }

            protocol.UserId = player.UserId;
            player.LoadMsg  = protocol;
            ServerInfo server_info = Server.GetInstance().GetServerInfoBySceneId(SceneId.LOGIN);
            Server.GetInstance().GetSocket().SendToServer(protocol, server_info.ConnectId, connect_id, null);
        }
        break;

        //玩家顶号
        case MsgCode.LR_PlayerRepeat:
        {
            LRPlayerRepeat protocol   = data as LRPlayerRepeat;
            RoutePlayer    old_player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(protocol.PlayerId);
            old_player.Logout();

            RoutePlayer player      = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(addition);
            ServerInfo  server_info = Server.GetInstance().GetServerInfoBySceneId(SceneId.LOGIN);
            Server.GetInstance().GetSocket().SendToServer(player.LoadMsg, server_info.ConnectId, connect_id, null);
        }
        break;

        //场景加载玩家数据完成
        case MsgCode.SR_LoadPlayerComplete:
        {
            SRLoadPlayerComplete protocol = data as SRLoadPlayerComplete;

            RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(addition);
            player.PlayerId    = protocol.PlayerId;
            player.CurServerId = protocol.ServerId;
            player.CurSceneId  = protocol.SceneId;
            player.AddState(RoutePlayerState.LOADED);
            player.LoadMsg = null;
            Server.GetInstance().GetService <RouteService>().GetUserMgr().AddPlayerByPlayerId(player);
        }
        break;

        //客户端重连
        case MsgCode.CS_Reconnect:
        {
            CSReconnect protocol = data as CSReconnect;
            SCReconnect message  = new SCReconnect();

            RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByPlayerId(protocol.PlayerId);
            if (player == null)
            {
                Log.DebugFormat("CS_Reconnect Not RoutePlayer Id:{0}", protocol.PlayerId);
                message.ResultCode = NoticeCode.ReConnectFail;
                Server.GetInstance().GetSocket().SendToClient(message, connect_id);
                return;
            }

            if (!player.CheckState(RoutePlayerState.LOADED))
            {
                Log.DebugFormat("CS_Reconnect RouteUser Not Loaded Id:{0}", protocol.PlayerId);
                message.ResultCode = NoticeCode.ReConnectFail;
                Server.GetInstance().GetSocket().SendToClient(message, connect_id);
                return;
            }

            if (player.LoginKey != protocol.LoginKey)
            {
                Log.DebugFormat("CS_Reconnect LoginKey Not Equal {0} {1}", player.LoginKey, protocol.LoginKey);
                message.ResultCode = NoticeCode.ReConnectFail;
                Server.GetInstance().GetSocket().SendToClient(message, connect_id);
                return;
            }

            message.ResultCode = NoticeCode.ReconnectSucc;
            Server.GetInstance().GetSocket().SendToClient(message, connect_id);

            //重连更新用户连接
            player.ConnectId = connect_id;
            Server.GetInstance().GetService <RouteService>().GetUserMgr().AddPlayerByConnectId(player);
            player.Reconnect();
        }
        break;

        //服务器间远程调用
        case MsgCode.SS_RemoteCall:
        {
            SSRemoteCall protocol         = data as SSRemoteCall;
            ServerInfo   from_server_info = Server.GetInstance().GetServerInfoByConnectId(connect_id);
            if (from_server_info != null)
            {
                protocol.FromServerId = from_server_info.ServerId;
                ServerInfo to_server_info = Server.GetInstance().GetServerInfoBySceneId(protocol.ToSceneId, protocol.ToServerId);
                if (to_server_info != null)
                {
                    Server.GetInstance().GetSocket().SendToServer(protocol, to_server_info.ConnectId);
                }
                else
                {
                    Log.Debug("SS_RemoteCall ToServerInfo Not Exist SceneId:" + protocol.ToSceneId + " ServerId:" + protocol.ToServerId);
                }
            }
            else
            {
                Log.Debug("SS_RemoteCall FromServerInfo Not Exist ConnectId:" + addition);
            }
        }
        break;

        //服务器间远程调用返回
        case MsgCode.SS_RemoteResult:
        {
            SSRemoteResult protocol         = data as SSRemoteResult;
            ServerInfo     from_server_info = Server.GetInstance().GetServerInfoByConnectId(addition);
            if (from_server_info != null)
            {
                protocol.FromServerId = from_server_info.ServerId;
                ServerInfo to_server_info = Server.GetInstance().GetServerInfoByServerId(protocol.ToServerId);
                if (to_server_info != null)
                {
                    Server.GetInstance().GetSocket().SendToServer(protocol, to_server_info.ConnectId);
                }
            }
        }
        break;

        //切出原场景
        case MsgCode.SR_ChangeOutScene:
        {
            SRChangeOutScene protocol       = data as SRChangeOutScene;
            ServerInfo       to_server_info = Server.GetInstance().GetServerInfoBySceneId(protocol.ToSceneId, protocol.ToServerId);
            if (to_server_info != null)
            {
                RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByPlayerId(addition);
                player.CurServerId = protocol.ToServerId;
                player.CurSceneId  = protocol.ToSceneId;

                RSChangeInScene message = new RSChangeInScene();
                message.PlayerStruct = protocol.PlayerStruct;
                Server.GetInstance().GetSocket().SendToServer(message, to_server_info.ConnectId);
            }
            else
            {
                Log.Debug("SR_ChangeOutScene ToServerInfo Not Exist SceneId:" + protocol.ToSceneId + " ServerId:" + protocol.ToServerId);
            }
        }
        break;

        default:
        {
            ServerInfo server_info = Server.GetInstance().GetServerInfoByConnectId(connect_id);
            if (server_info != null)
            {
                //来自服务器的信息
                switch (addition)
                {
                //转发给服务器
                case TranType.ALL_SERVER:
                {
                    Server.GetInstance().SendMsgToAllServer(data);
                }
                break;

                //转发给客户端
                case TranType.ALL_PLAYER:
                {
                    Server.GetInstance().GetService <RouteService>().GetUserMgr().DispatchToPlayer(data);
                }
                break;

                case TranType.ALL_PLAYER_EXCEPT_LIST:
                {
                    Server.GetInstance().GetService <RouteService>().GetUserMgr().DispatchToPlayerExceptList(data, player_id_list);
                }
                break;

                case TranType.PLAYER_LIST:
                {
                    Server.GetInstance().GetService <RouteService>().GetUserMgr().DispatchToPlayerList(data, player_id_list);
                }
                break;

                default:
                {
                    if (addition > 0)
                    {
                        RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByPlayerId(addition);
                        if (player != null)
                        {
                            player.SendMsg(data);
                        }
                        else
                        {
                            Log.Error("Transmit Protocol Not Player Id:{0}", addition);
                        }
                    }
                    else
                    {
                        Log.Error("Transmit Protocol TranType:{0} Not Handle", addition);
                    }
                }
                break;
                }
            }
            else
            {
                //来自客户端的信息,转发给服务器
                RoutePlayer player = Server.GetInstance().GetService <RouteService>().GetUserMgr().GetPlayerByConnectId(connect_id);
                if (player == null || !player.CheckState(RoutePlayerState.LOADED))
                {
                    return;
                }

                if (msg_id == MsgCode.SC_HeartBeat)
                {
                    player.SetActive();
                    SCHeartBeat message = new SCHeartBeat();
                    player.SendMsg(message);
                    return;
                }

                //存在指定转发的场景ID
                if (MsgCode.ProtocolSceneId.ContainsKey(msg_id))
                {
                    int        to_scene_id    = MsgCode.ProtocolSceneId[msg_id];
                    ServerInfo to_server_info = Server.GetInstance().GetServerInfoBySceneId(to_scene_id);
                    Server.GetInstance().GetSocket().SendToServer(data, to_server_info.ConnectId, player.PlayerId);
                }
                else
                {
                    //默认转发到用户所在场景服
                    ServerInfo to_server_info = Server.GetInstance().GetServerInfoBySceneId(player.CurSceneId, player.CurServerId);
                    Server.GetInstance().GetSocket().SendToServer(data, to_server_info.ConnectId, player.PlayerId);
                }
            }
        }
        break;
        }
    }
Exemple #10
0
    public static MSMessageBase GetEmptyMessageById(int id)
    {
        MSMessageBase msg = null;

        switch (id)
        {
        case 102:
            msg = new BVector2();
            break;

        case 103:
            msg = new BVector3();
            break;

        case 101:
            msg = new BPlayer();
            break;

        case 1001:
            msg = new CSLogin();
            break;

        case 1003:
            msg = new SCJoinGame();
            break;

        case 1004:
            msg = new SCLogin();
            break;

        case 1005:
            msg = new SCGameSync();
            break;

        case 2001:
            msg = new CSMove();
            break;

        case 2002:
            msg = new SCMove();
            break;

        case 2003:
            msg = new CSJump();
            break;

        case 2004:
            msg = new SCJump();
            break;

        case 2005:
            msg = new CSDash();
            break;

        case 2006:
            msg = new SCDashStart();
            break;

        case 2007:
            msg = new SCDashStop();
            break;


        default:
            break;
        }
        return(msg);
    }
Exemple #11
0
    public void SCLogin(object data, int connect_id)
    {
        SCLogin protocol = data as SCLogin;

        LogTool.Tip("Login RetCode:" + protocol.Code);
    }