Ejemplo n.º 1
0
        //开始进入战斗
        internal ErrorCode BeginBattle(
            long userID,
            int mapID, int serverID, out GameServerInfo serverInfo)
        {
            serverInfo = null;
            var battleServer = ServerManager.Singleton.GetFreeBattleServerID();

            if (battleServer == null)
            {
                return(ErrorCode.NOFreeBattleServer);
            }
            UserServerInfo user;

            if (_servers.TryToGetValue(userID, out user))
            {
                var task = new Task_L2B_ExitUser {
                    UserID = user.UserID
                };
                var b       = ServerManager.Singleton.GetBattleServerMappingByServerID(user.BattleServerID);
                var bClient = Appliaction.Current.GetServerConnectByClientID(b.ClientID);
                if (bClient != null)
                {
                    NetProtoTool.SendTask(bClient, task);
                    //bClient.SendMessage(m);
                }
                return(ErrorCode.PlayerIsInBattle);
            }

            var su = _servers.Add(
                userID,
                new UserServerInfo
            {
                MapID          = mapID,
                BattleServerID = battleServer.ServerInfo.ServerID,
                GServerID      = serverID,
                UserID         = userID
            });

            if (su)
            {
                serverInfo = battleServer.ServerInfo;
                var gateserver = ServerManager.Singleton.GetGateServerMappingByServerID(serverID);
                var task       = new Task_L2B_StartBattle
                {
                    MapID = mapID,
                    Users = new List <PlayerServerInfo> {
                        new PlayerServerInfo {
                            UserID      = userID,
                            ServerID    = serverID,
                            ServiceHost = gateserver.ServiceHost,
                            ServicePort = gateserver.ServicePort
                        }
                    }
                };
                //task
                //var message = NetProtoTool.ToNetMessage(XNet.Libs.Net.MessageClass.Task, task);
                var serverConnect = Appliaction.Current.GetServerConnectByClientID(battleServer.ClientID);
                if (serverConnect == null)
                {
                    _servers.Remove(userID);
                    return(ErrorCode.BattleServerHasDisconnect);
                }
                NetProtoTool.SendTask(serverConnect, task);
                //serverConnect.SendMessage(message);
                return(Proto.ErrorCode.OK);
            }
            else
            {
                return(Proto.ErrorCode.PlayerIsInBattle);
            }
        }
Ejemplo n.º 2
0
        public override L2C_Login DoResponse(C2L_Login request, Client client)
        {
            if (!ProtoTool.CompareVersion(request.Version))
            {
                return(new L2C_Login {
                    Code = ErrorCode.VersionError
                });
            }
            using (var db = Appliaction.Current.GetDBContext())
            {
                var pwd   = DBTools.GetPwd(request.Password, db);
                var query = db.TbaCCount
                            .Where(t => t.UserName == request.UserName && t.Password == pwd)
                            .SingleOrDefault();
                if (query == null)
                {
                    return(new L2C_Login {
                        Code = ErrorCode.LoginFailure
                    });
                }
                else
                {
                    var session = DateTime.UtcNow.Ticks.ToString();
                    Appliaction.Current.SetSession(query.ID, session);
                    query.LastLoginDateTime = DateTime.UtcNow;
                    query.LoginCount       += 1;
                    db.SubmitChanges();

                    var mapp = ServerManager.Singleton.GetGateServerMappingByServerID(query.ServerID);
                    if (mapp == null)
                    {
                        return(new L2C_Login {
                            Code = ErrorCode.NOFoundServerID
                        });
                    }
                    UserServerInfo info;
                    if (BattleManager.Singleton.GetBattleServerByUserID(query.ID, out info))
                    {
                        var task = new Task_L2B_ExitUser {
                            UserID = query.ID
                        };
                        var server = ServerManager.Singleton.GetBattleServerMappingByServerID(info.BattleServerID);
                        if (server != null)
                        {
                            var connection = Appliaction.Current.GetServerConnectByClientID(server.ClientID);
                            if (connection != null)
                            {
                                var message = NetProtoTool.ToNetMessage(MessageClass.Task, task);
                                connection.SendMessage(message);
                            }
                        }
                    }
                    return(new L2C_Login
                    {
                        Code = ErrorCode.OK,
                        Server = mapp.ServerInfo,
                        Session = session,
                        UserID = query.ID
                    });
                }
            }
        }