/**
         *
         *
         *
         * @param session
         * @param doc
         * @param item
         */
        public void doorLoadDBTypeOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            //<msg t='DBS'><body action='loadDBTypeOK'>
            //<session>127.0.0.1:57107</session>
            //<DBTypeModel><mode>dz</mode><ver>X2.0</ver><sql>MySql</sql></DBTypeModel></body></msg>

            try{
                //trace(doc.ToString());

                getGameLogicServer().selectDB = DBTypeModel.fromXML(doc);


                XmlNode c = doc.SelectSingleNode("/msg/body/session");

                String userIpPort = c.InnerText;

                AppSession userSession = getGameLogicServer().netGetSession(userIpPort);

                String sAction = ServerAction.loadDBTypeOK;

                if (null != userSession)
                {
                    getGameLogicServer().Send(userSession, XmlInstruction.fengBao(sAction,
                                                                                  getGameLogicServer().selectDB.toXMLString(true)));

                    Log.WriteStrBySend(sAction, userSession.getRemoteEndPoint().ToString());
                }
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorLoadDBTypeOK", exd.Message);
            }
        }
        public void doorHasRegOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText;        //InnerText;

                AppSession userSession = getGameLogicServer().CLIENTAcceptor.getSession(userStrIpPort);

                //
                String saction = ServerAction.hasRegOK;

                String contentXml = "";

                //如果不在线则略过发送
                getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction, contentXml));

                //
                Log.WriteStrBySend(saction, userSession.getRemoteEndPoint().ToString());
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorHasRegOK", exd.Message, exd.StackTrace);
            }
        }
        /**
         *
         *
         * @param session
         * @param doc
         * @param item
         */
        public void doorLoadTopListOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                //<session>127.0.0.1:64828</session><chart total_add="0" total_sub="0"></chart>
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText; //InnerText;


                String topListXml = node.ChildNodes[1].OuterXml; //(new XMLOutputter()).outputString(node.ChildNodes()[1]);

                //
                String saction = ServerAction.topList;

                //回复
                //注意这里的session是上面的usersession,要判断是否还在线

                AppSession userSession = this.getGameLogicServer().CLIENTAcceptor.getSession(userStrIpPort);

                //
                this.getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction, topListXml));
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorLoadTopListOK", exd.Message, exd.StackTrace);
            }
        }
示例#4
0
        /**
         * 刷新金币
         *
         * @param session
         * @param doc
         */
        public void doorLoadG(AppSession session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                //
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String strIpPort = session.getRemoteEndPoint().ToString();

                //
                IUserModel user = CLIENTAcceptor.getUser(strIpPort);

                //
                String caction = RCClientAction.loadG;

                String content = "<session>" + strIpPort + "</session><nick><![CDATA[" + user.getNickName() + "]]></nick>";

                //交给记录服务器处理
                RCConnector.Write(
                    XmlInstruction.DBfengBao(caction, content)
                    );

                //
                Log.WriteStrByTurn(SR.getRecordServer_displayName(), RCConnector.getRemoteEndPoint(), caction);
            }
            catch (Exception exd)
            {
                Log.WriteStrByException("GameLogicServer", "doorLoadG", exd.Message, exd.StackTrace);
            }
        }
示例#5
0
        /**
         *
         *
         * @param session
         * @param doc
         * @param item
         */
        public void doorHasReg(AppSession session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                //
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String strIpPort = session.getRemoteEndPoint().ToString();

                //
                String id_sql = node.InnerText;

                //
                String caction = RCClientAction.hasReg;

                String content = "<session>" + strIpPort + "</session><id_sql>" + id_sql + "</id_sql>";

                //交给记录服务器处理
                RCConnector.Write(XmlInstruction.DBfengBao(caction, content));

                //
                Log.WriteStrByTurn(SR.getRecordServer_displayName(), RCConnector.getRemoteEndPoint(), caction);
            }
            catch (Exception exd)
            {
                Log.WriteStrByException("GameLogicServer", "doorHasBeenReg", exd.Message, exd.StackTrace);
            }
        }
示例#6
0
 /// <exception cref="T:Patchwork.Engine.PatchDeclerationException">The patch did not have a PatchInfo class.</exception>
 public static PatchInstruction ToPatchInstruction(this XmlInstruction instruction)
 {
     return(new PatchInstruction
     {
         AppInfo = AppContextManager.Context.Value,
         IsEnabled = true,
         Patch = PatchManager.TryGetManifest(instruction.Location),
         Location = instruction.Location
     });
 }
        /**
         * 每日登陆(至少玩一把)
         *
         * @param session
         * @param doc
         * @param item
         */
        public void doorChkEveryDayLoginAndGetOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode gameNode = doc.SelectSingleNode("/msg/body/game");

                //具体奖励数额
                String gv = gameNode.Attributes["v"].Value;

                //
                XmlNode node = doc.SelectSingleNode("/msg/body/game");

                int len = node.ChildNodes.Count;

                for (int i = 0; i < len; i++)
                {
                    String edlValue = node.ChildNodes[i].Attributes["edl"].Value;

                    String id = node.ChildNodes[i].Attributes["id"].Value;

                    IUserModel u = getGameLogicServer().CLIENTAcceptor.getUserById(id);

                    if (u == null)
                    {
                        continue;
                    }

                    String userStrIpPort = u.getstrIpPort();        //node.ChildNodes()[i].getAttributeValue("session");

                    String saction = "";

                    saction = ServerAction.everyDayLoginVarsUpdate;

                    //

                    //回复
                    //注意这里的session是上面的usersession,要判断是否还在线
                    if (getGameLogicServer().CLIENTAcceptor.hasSession(userStrIpPort))
                    {
                        AppSession userSession = getGameLogicServer().CLIENTAcceptor.getSession(userStrIpPort);

                        getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction, "<edl v='" + gv + "'>" + edlValue + "</edl>"));

                        //
                        Log.WriteStrBySend(saction, userStrIpPort);
                    }
                }     //end for
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorChkEveryDayLoginAndGetOK", exd.Message);
            }
        }
        public void doorRegOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText;        //InnerText;

                String usersex   = node.ChildNodes[1].InnerText;
                String username  = node.ChildNodes[2].InnerText;
                String userpwd   = node.ChildNodes[3].InnerText;
                String useremail = node.ChildNodes[4].InnerText;         //这里的mail是email

                String bbs    = node.ChildNodes[5].InnerText;
                String sid    = node.ChildNodes[6].InnerText;
                int    id_sql = parseInt(node.ChildNodes[7].InnerText);

                //
                String saction = ServerAction.regOK;

                //回复
                //注意这里的session是上面的usersession,要判断是否还在线
                AppSession userSession = getGameLogicServer().CLIENTAcceptor.getSession(userStrIpPort);

                String contentXml = "<session>" + userStrIpPort + "</session><sex>" +
                                    usersex + "</sex><nick><![CDATA[" +
                                    username + "]]></nick><pwd><![CDATA[" +
                                    userpwd + "]]></pwd><bbs><![CDATA[" +
                                    bbs + "]]></bbs>" +
                                    //"<hico><![CDATA[" + hico + "]]></hico>" +
                                    //"<sid><![CDATA[" + sid + "]]></sid>" +
                                    "<id_sql>" +
                                    id_sql.ToString() + "</id_sql>" +
                                    "<mail>" +
                                    useremail + "</mail>";


                //如果不在线则略过发送
                getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction, contentXml));

                //
                Log.WriteStrBySend(saction, userSession.getRemoteEndPoint().ToString());
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorRegOK", exd.Message);
            }
        }
        public void doorLoadGOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText; //InnerText;

                String g = node.ChildNodes[1].InnerText;             //InnerText;

                String id_sql = node.ChildNodes[1].Attributes["id_sql"].Value;
                //
                String saction = ServerAction.gOK;

                //回复
                //注意这里的session是上面的usersession,要判断是否还在线
                AppSession userSession = getGameLogicServer().netGetSession(userStrIpPort);

                //如果不在线则略过发送
                if (null != userSession)
                {
                    IUserModel u = getGameLogicServer().CLIENTAcceptor.getUser(userStrIpPort);

                    //以免引发不必要的异常,方便测试
                    if (!(g == ""))
                    {
                        u.setG(parseInt(g));
                    }

                    getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction,
                                                                                  "<g " + "id_sql='" + id_sql + "'" + ">" + g + "</g>"));

                    //
                    Log.WriteStrBySend(saction, userSession.getRemoteEndPoint().ToString());
                }
                else
                {
                    Log.WriteStrBySendFailed(saction, userSession.getRemoteEndPoint().ToString());
                }         //end if
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorLoadGOK", exd.Message);
            }
        }
        public void doorNeedProof(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                String saction = ServerAction.hasProof;

                //回复
                session.Write(
                    XmlInstruction.DBfengBao(saction, "<proof>" + getGameLogicServer().RCConnector.getProof() + "</proof>")
                    );

                //
                Log.WriteStrBySend(saction, session.getRemoteEndPoint().ToString());
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorNeedProof", exd.Message, exd.StackTrace);
            }
        }
示例#11
0
        /**
         * 注册
         *
         * @param session
         * @param doc
         */
        public void doorReg(AppSession session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                //
                String usersex   = node.ChildNodes[0].InnerText;
                String username  = node.ChildNodes[1].InnerText;
                String userpwd   = node.ChildNodes[2].InnerText;
                String useremail = node.ChildNodes[3].InnerText;

                String bbs = node.ChildNodes[4].InnerText;

                String sessionId = node.ChildNodes[5].InnerText;
                String id_sql    = node.ChildNodes[6].InnerText;

                //需校验,其中email是从网页输出的,用户一般改不了,但用户名可改
                String caction = RCClientAction.reg;

                String contentXml = "<session>" + session.getRemoteEndPoint().ToString() + "</session><sex>" +
                                    usersex + "</sex><nick><![CDATA[" +
                                    username + "]]></nick><pwd><![CDATA[" +
                                    userpwd + "]]></pwd><mail><![CDATA[" +
                                    useremail + "]]></mail><bbs><![CDATA[" +
                                    bbs + "]]></bbs><sid>" +
                                    sessionId + "</sid><id_sql>" +
                                    id_sql + "</id_sql>";


                //注册前先到记录服务器验证一下
                RCConnector.Write(
                    XmlInstruction.DBfengBao(caction, contentXml)
                    );

                //
                Log.WriteStrByTurn(SR.getRecordServer_displayName(), caction, RCConnector.getRemoteEndPoint());
            }
            catch (Exception exd)
            {
                Log.WriteStrByException("GameLogicServer", "doorReg", exd.Message);
            }
        }
        public void doorRegKO(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText;

                String status = node.ChildNodes[1].InnerText;

                String param = node.ChildNodes[2].InnerText;

                //
                String saction = ServerAction.regKO;

                //回复
                //注意这里的session是上面的usersession,要判断是否还在线
                AppSession userSession = getGameLogicServer().CLIENTAcceptor.getSession(userStrIpPort);

                //如果不在线则略过发送
                if (null != userSession)
                {
                    //if (userSession.getConnected())
                    //{
                    getGameLogicServer().Send(userSession, XmlInstruction.fengBao(saction, "<status>" + status + "</status><p>" + param + "</p>"));

                    //
                    Log.WriteStrBySend(saction, userSession.getRemoteEndPoint().ToString());
                    //} //end if
                }
                else
                {
                    Log.WriteStrBySendFailed(saction, userSession.getRemoteEndPoint().ToString());
                }         //end if
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorRegKO", exd.Message);
            }
        }
示例#13
0
        public void doorLoadDBType(AppSession session, XmlDocument doc)
        {
            try
            {
                String caction = RCClientAction.loadDBType;



                String contentXml = "<session>" + session.getRemoteEndPoint().ToString() + "</session>";


                RCConnector.Write(
                    XmlInstruction.DBfengBao(caction, contentXml)
                    );

                //
                Log.WriteStrByTurn(SR.getRecordServer_displayName(), RCConnector.getRemoteEndPoint(), caction);
            }
            catch (Exception exd)
            {
                Log.WriteStrByException("GameLogicServer", "doorVerChk", exd.Message);
            }
        }
示例#14
0
        /**
         * 登陆
         *
         * @param session
         * @param xml
         */
        public void doorLogin(AppSession session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                //
                XmlNode node = doc.SelectSingleNode("/msg/body");

                //先发给数据库服务器,登录成功后,
                //同时校验重复登录,通知被挤者
                String username = node.ChildNodes[0].InnerText;
                String userpwd  = node.ChildNodes[1].InnerText;

                //新加头像路径,为兼容dvbbs
                String bbs     = node.ChildNodes[2].InnerText;
                String headIco = node.ChildNodes[3].InnerText;

                String sid = node.ChildNodes[4].InnerText;

                String id_sql = node.ChildNodes[5].InnerText;

                //check
                //username 可以为空,现在用id_sql
                //if (username == ""))
                if (userpwd == "")
                {
                    //Logger.WriteStrByWarn("用户名为空? 用户名:" + username + " 密码:" + userpwd);
                    Log.WriteStrByWarn(SR.GetString(SR.getUserPwd_is_empty(), username, userpwd));
                }

                //url参数中文或其它语言被浏览器自动编码
                //if (username.IndexOf("%") >= 0)
                //{
                //        Log.WriteStrByWarn(SR.GetString(SR.getUsername_is_browser_auto_code(), username,userpwd));

                //}

                if (sid == null)
                {
                    sid = "null";
                }


                //
                String caction    = RCClientAction.login;     //DBClientAction.login;
                String contentXml = "<session>" + session.getRemoteEndPoint().ToString() +
                                    "</session><nick><![CDATA[" + username +
                                    "]]></nick><pword><![CDATA[" + userpwd +
                                    "]]></pword><bbs><![CDATA[" + bbs +
                                    "]]></bbs><hico><![CDATA[" + headIco +
                                    "]]></hico><sid><![CDATA[" + sid +
                                    "]]></sid><id_sql>" + id_sql +
                                    "</id_sql>";

                this.RCConnector.Write(
                    XmlInstruction.DBfengBao(caction, contentXml)
                    );

                Log.WriteStrByTurn(SR.getRecordServer_displayName(), RCConnector.getRemoteEndPoint(), caction);

                //
                //doorLogin_Sub_isBBSOnline(content);

                //登陆交给数据库服务器处理
                //this.RCConnector.Write(

                //    this.XmlInstruction.DBfengBao(caction, content)

                //   );

                //
                //Logger.WriteStrByTurn("数据库服务器", this.RCConnector.getRemoteEndPoint(), caction);
            }
            catch (Exception exd)
            {
                Log.WriteStrByException("GameLogicServer", "doorLogin", exd.Message);
            }
        }
示例#15
0
        public override void doorLogOK(SocketConnector session, XmlDocument doc, SessionMessage item)
        {
            try
            {
                XmlNode node = doc.SelectSingleNode("/msg/body");

                String userStrIpPort = node.ChildNodes[0].InnerText;
                String usersex       = node.ChildNodes[1].InnerText;
                String username      = node.ChildNodes[2].InnerText;
                String userpwd       = node.ChildNodes[3].InnerText;
                String useremail     = node.ChildNodes[4].InnerText;
                String bbs           = node.ChildNodes[5].InnerText;
                String hico          = node.ChildNodes[6].InnerText;
                String sid           = node.ChildNodes[7].InnerText;
                int    id_sql        = Integer.valueOf(node.ChildNodes[8].InnerText);

                String id     = node.ChildNodes[9].InnerText;
                String status = node.ChildNodes[10].InnerText;


                //
                String        saction    = ServerAction.logOK;
                StringBuilder contentXml = new StringBuilder();

                //回复
                //注意这里的session是上面的usersession,要判断是否还在线
                AppSession userSession = DdzLogic.getInstance().CLIENTAcceptor.getSession(userStrIpPort);

                //判断重复登录,如果这里发生异常,可能就需要多登录几次才能挤掉对方,并成功登录
                AppSession outSession = DdzLogic.getInstance().CLIENTAcceptor.getSessionByAccountName(username);

                if (null != outSession)
                {
                    //发一个通知,您与服务器的连接断开,原因:您的帐号在另一处登录
                    //然后触发ClearSession
                    String        logoutAction = ServerAction.logout;
                    String        logoutCode   = "1";
                    StringBuilder logoutXml    = new StringBuilder();

                    logoutXml.Append("<session>").Append(userSession.getRemoteEndPoint().ToString()).Append("</session>");
                    logoutXml.Append("<session>").Append(outSession.getRemoteEndPoint().ToString()).Append("</session>");
                    logoutXml.Append("<code>").Append(logoutCode).Append("</code>");
                    logoutXml.Append("<u></u>");

                    DdzLogic.getInstance().Send(outSession, XmlInstruction.fengBao(logoutAction, logoutXml.ToString()));

                    //
                    Log.WriteStrBySend(logoutAction, outSession.getRemoteEndPoint().ToString());

                    //
                    DdzLogic.getInstance().CLIENTAcceptor.trigClearSession(outSession, outSession.getRemoteEndPoint().ToString());
                }

                //如果不在线则略过发送
                if (null != userSession)
                {
                    //超过在线人数
                    if (DdzLogic.getInstance().CLIENTAcceptor.getUserCount() >= DdzLogic.getInstance().CLIENTAcceptor.getMaxOnlineUserConfig())
                    {
                        //调整saction
                        saction = ServerAction.logKO;
                        //调整status
                        status = "12";                     //来自MembershipLoginStatus2.PeopleFull12

                        contentXml.Append("<session>").Append(userStrIpPort).Append("</session>");
                        contentXml.Append("<status>").Append(status).Append("</status>");
                        contentXml.Append("<u></u>");

                        DdzLogic.getInstance().Send(userSession, XmlInstruction.fengBao(saction, contentXml.ToString()));

                        //
                        Log.WriteStrBySend(saction, userStrIpPort);
                    }
                    else
                    {
                        IUserModel user = UserModelFactory.Create(userStrIpPort, id, id_sql, usersex, username, username, bbs, hico);

                        //加入在线用户列表
                        //CLIENTAcceptor.addUser(userSession.getRemoteEndPoint().ToString(), user);
                        DdzLogic.getInstance().CLIENTAcceptor.addUser(userStrIpPort, user);

                        contentXml.Append("<session>").Append(userStrIpPort).Append("</session>");
                        contentXml.Append("<status>").Append(status).Append("</status>");
                        contentXml.Append(user.toXMLString());

                        DdzLogic.getInstance().Send(userSession, XmlInstruction.fengBao(saction, contentXml.ToString()));

                        //
                        Log.WriteStrBySend(saction, userStrIpPort);

                        //
                        Log.WriteFileByLoginSuccess(username, userStrIpPort);
                        Log.WriteFileByOnlineUserCount(DdzLogic.getInstance().CLIENTAcceptor.getUserCount());
                    } //end if
                }     //end if
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME(), "doorLogOK", exd.Message, exd.StackTrace);
            }
        }