예제 #1
0
        public override B2C_JoinBattle DoResponse(C2B_JoinBattle request, Client client)
        {
            if (!ProtoTool.CompareVersion(request.Version))
            {
                return(new B2C_JoinBattle {
                    Code = ErrorCode.VersionError
                });
            }

            var result = ErrorCode.Error;
            var req    = Appliaction.Current.Client.R <B2L_CheckSession, L2B_CheckSession>();

            req.RequestMessage.SessionKey = request.Session;
            req.RequestMessage.UserID     = request.UserID;
            req.OnCompleted = (s, r) => { result = r.Code; };
            req.SendRequest();

            if (result == ErrorCode.OK)
            {
                client.UserState = request.UserID;

                if (!MonitorPool.S.Get <MapSimulaterManager>().BindUser(request.UserID, client.ID))
                {
                    result = ErrorCode.NOFoundUserOnBattleServer;
                }
            }
            return(new B2C_JoinBattle {
                Code = result
            });
        }
예제 #2
0
        public override L2G_Reg DoResponse(G2L_Reg request, Client client)
        {
            if (!ProtoTool.CompareVersion(request.Version))
            {
                return(new L2G_Reg {
                    Code = ErrorCode.VersionError
                });
            }


            client.HaveAdmission = true;
            client.UserState     = request.ServerID;
            var server = new GameServerInfo
            {
                ServerID = request.ServerID,
                Host     = request.Host,
                Port     = request.Port
            };
            var success = ServerManager
                          .S.AddGateServer(
                client.ID,
                request.CurrentPlayer,
                server,
                request.ServiceHost,
                request.ServicesProt
                );

            if (!success)
            {
                return(new L2G_Reg {
                    Code = ErrorCode.Error
                });
            }

            client.OnDisconnect += OnDisconnect;
            return(new L2G_Reg {
                Code = ErrorCode.OK
            });
        }
예제 #3
0
        public override G2C_Login DoResponse(C2G_Login request, Client client)
        {
            if (!ProtoTool.CompareVersion(request.Version))
            {
                return(new G2C_Login {
                    Code = ErrorCode.VersionError
                });
            }


            if (string.IsNullOrWhiteSpace(request.Session))
            {
                return new G2C_Login {
                           Code = ErrorCode.Error
                }
            }
            ;



            var req = Appliaction.Current.Client.CreateRequest <G2L_CheckUserSession, L2G_CheckUserSession>();

            req.RequestMessage.Session = request.Session;
            req.RequestMessage.UserID  = request.UserID;
            ErrorCode resultCode = ErrorCode.Error;

            req.OnCompleted = (s, res) =>
            {
                if (s && res.Code == ErrorCode.OK)
                {
                    //kick other
                    var clients = Appliaction.Current.ListenServer.CurrentConnectionManager.AllConnections;
                    foreach (var i in clients)
                    {
                        if (i.UserState != null && (long)i.UserState == request.UserID)
                        {
                            i.Close();
                        }
                    }

                    resultCode           = ErrorCode.OK;
                    client.HaveAdmission = true;
                    client.UserState     = request.UserID;
                }
            };
            req.SendRequest();

            if (client.HaveAdmission)
            {
                Managers.UserData data;

                var manager = MonitorPool.S.Get <UserDataManager>();
                if (!manager.TryToGetUserData(request.UserID, out data))
                {
                    return(new G2C_Login {
                        Code = ErrorCode.NoGamePlayerData
                    });
                }

                return(new G2C_Login
                {
                    Code = ErrorCode.OK,
                    Package = data.GetPackage(),
                    Hero = data.GetHero(),
                    Coin = data.Coin,
                    Gold = data.Gold
                });
            }
            else
            {
                return(new G2C_Login {
                    Code = resultCode
                });
            }
        }
    }
예제 #4
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
                    });
                }
            }
        }
예제 #5
0
        public override L2C_Reg DoResponse(C2L_Reg request, Client client)
        {
            if (!ProtoTool.CompareVersion(request.Version))
            {
                return(new L2C_Reg {
                    Code = ErrorCode.VersionError
                });
            }

            if (string.IsNullOrWhiteSpace(request.UserName) || string.IsNullOrWhiteSpace(request.Password))
            {
                return(new L2C_Reg {
                    Code = ErrorCode.RegInputEmptyOrNull
                });
            }



            using (var db = Appliaction.Current.GetDBContext())
            {
                var query = db.TbaCCount.Where(t => t.UserName == request.UserName).Count();
                if (query > 0)
                {
                    return(new L2C_Reg
                    {
                        Code = ErrorCode.RegExistUserName
                    });
                }
                else
                {
                    var free = ServerManager.S.GetFreeGateServer();
                    if (free == null)
                    {
                        return(new L2C_Reg()
                        {
                            Code = ErrorCode.NoFreeGateServer
                        });
                    }

                    var serverID = free.ServerInfo.ServerID;

                    var pwd = DBTools.GetPwd(request.Password, db);
                    var acc = new DataBaseContext.TbaCCount
                    {
                        UserName          = request.UserName,
                        Password          = pwd,
                        CreateDateTime    = DateTime.UtcNow,
                        LoginCount        = 0,
                        LastLoginDateTime = DateTime.UtcNow,
                        ServerID          = serverID
                    };

                    db.TbaCCount.InsertOnSubmit(acc);
                    db.SubmitChanges();
                    //var userID = Convert.ToInt64( db.InsertWithIdentity(acc));
                    var session = DateTime.UtcNow.Ticks.ToString();
                    Appliaction.Current.SetSession(acc.ID, session);
                    var mapping = ServerManager.Singleton.GetGateServerMappingByServerID(acc.ServerID);
                    if (mapping == null)
                    {
                        return(new L2C_Reg {
                            Code = ErrorCode.NOFoundServerID
                        });
                    }
                    return(new L2C_Reg
                    {
                        Code = ErrorCode.OK,
                        Session = session,
                        UserID = acc.ID,
                        Server = mapping.ServerInfo
                    });
                }
            }
        }