public void avatarfindfriend(string username, string token, string friendname)
        {
            var pattern = @"/(" + friendname + @")/gi";
            var filter  = Builders <BsonDocument> .Filter.Regex(InfoNameDefs.AvatarName
                                                                , pattern);

            var res = dbavatar.FindManyData(TableName, filter, ADBAccessor.projections(InfoNameDefs.AvatarName
                                                                                       , InfoNameDefs.AvatarHead
                                                                                       , InfoNameDefs.Username));

            if (res != null && res.Count > 0)
            {
                var lres = new List <List <string> >();
                foreach (var r in res)
                {
                    var l = new List <string>();
                    l.Add(InfoNameDefs.AvatarName);
                    l.Add(r[InfoNameDefs.AvatarName].AsString);
                    l.Add(InfoNameDefs.AvatarHead);
                    l.Add(r.Contains(InfoNameDefs.AvatarHead) ? r[InfoNameDefs.AvatarHead].AsInt32.ToString() : "0");
                    l.Add("accid");
                    l.Add(r[InfoNameDefs.Username].AsString);
                    lres.Add(l);
                }
                SendError("names", AWebServerUtils.ToJsonArray(lres.ToArray()));
            }
            else
            {
                SendError(ErrorDefs.FindNone);
            }
        }
Example #2
0
        private async Task ProcessChat(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            string    user   = "";

            try
            {
                var allkeys = context.QueryString.AllKeys.ToList();
                if (allkeys.Contains("username") && allkeys.Contains("token"))
                {
                    user = context.QueryString["username"];
                    var token = context.QueryString["token"];
                    var check = ATokenManager.Instance.OnCheckToken(user, token);
                    if (!check)
                    {
                        AOutput.Log("invalid token " + user + "/" + token);
                        return;
                    }

                    #region 用户添加连接池
                    //第一次open时,添加到连接池中
                    if (!CONNECT_POOL.ContainsKey(user))
                    {
                        CONNECT_POOL.Add(user, new UserWithToken()
                        {
                            connect = socket, username = user
                        });                                                           //不存在,添加
                    }
                    else if (socket != CONNECT_POOL[user].connect)                    //当前对象不一致,更新
                    {
                        CONNECT_POOL[user].DoCancelConnect();
                        CONNECT_POOL[user] = new UserWithToken()
                        {
                            connect = socket, username = user
                        };
                    }
                    #endregion

                    await DoSend(CONNECT_POOL[user], AWebServerUtils.OnGetJsonError("0"));
                }
                else
                {
                    AOutput.Log("invalid argument");
                    return;
                }

                await StartReceive(socket, user);
            }
            catch (Exception ex)
            {
                try
                {
                    AOutput.LogError("监听异常:" + ex.Message);
                    AOutput.LogError("异常堆栈:" + ex.StackTrace);
                }
                catch { }
            }
        }
    internal string GameHandler_Move(string arg)
    {
        if (LastMoveTime > 0 &&
            LastMoveTime >= ApiDateTime.SecondsFromBegin())
        {
            return(AWebServerUtils.OnGetJsonError(ErrorDefs.MoveInCold));
        }
        switch (arg)
        {
        case "up":
            if (!CheckCanMoveTo(0, -1))
            {
                return(AWebServerUtils.OnGetJsonError(ErrorDefs.InvalidMove));
            }
            MapY--;
            break;

        case "down":
            if (!CheckCanMoveTo(0, 1))
            {
                return(AWebServerUtils.OnGetJsonError(ErrorDefs.InvalidMove));
            }
            MapY++;
            break;

        case "left":
            if (!CheckCanMoveTo(-1))
            {
                return(AWebServerUtils.OnGetJsonError(ErrorDefs.InvalidMove));
            }
            MapX--;
            break;

        case "right":
            if (!CheckCanMoveTo(1))
            {
                return(AWebServerUtils.OnGetJsonError(ErrorDefs.InvalidMove));
            }
            MapX++;
            break;
        }
        LastMoveTime = ApiDateTime.SecondsFromBegin();

        var l = new List <string>();

        l.AddRange(new string[] { InfoNameDefs.MapX, MapX.ToString()
                                  , InfoNameDefs.MapY, MapY.ToString()
                                  , InfoNameDefs.LastMoveTime, LastMoveTime.ToString() });
        var monster = AMapManager.Instance.OnGetMonster(MapX, MapY);

        if (monster != null)
        {
            l.Add("m");
            l.Add(JsonConvert.SerializeObject(monster));
        }
        return(AWebServerUtils.OnGetJsonError(l.ToArray()));
    }
Example #4
0
        public void accountlogin(string username, string password)
        {
            if (username == "fs" && password == "111")
            {
                if (!dUserTokens.ContainsKey(username))
                {
                    dUserTokens.Add(username, "1");
                }
                SendError("token", "1");
                return;
            }
            var result = dbaccount.FindOneData(tUserData
                                               , ADBAccessor.filter_eq(InfoNameDefs.Username, username)
                                               & ADBAccessor.filter_eq(InfoNameDefs.UserPassword, MD5String.Hash32(password))
                                               , null);

            if (result != null)
            {
                if (result.Contains(InfoNameDefs.Username))
                {
                    var token = "";
                    if (result.Contains(InfoNameDefs.UserToken))
                    {
                        token = result[InfoNameDefs.UserToken].AsString;
                    }
                    else
                    {
                        token = AWebServerUtils.GetEncryptCode();
                        var updateRes = dbaccount.UpdateOneData(tUserData, ADBAccessor.filter_eq(InfoNameDefs.Username, username)
                                                                , ADBAccessor.updates_build(ADBAccessor.update(InfoNameDefs.UserToken, token)), false);
                        if (!updateRes)
                        {
                            SendDBError();
                            return;
                        }
                    }
                    if (!dUserTokens.ContainsKey(username))
                    {
                        dUserTokens.Add(username, token);
                    }
                    SendError(InfoNameDefs.Username, username, InfoNameDefs.UserToken, dUserTokens[username]);
                }
                else
                {
                    SendError(ErrorDefs.UsernamePasswordMismatch);
                }
            }
            else
            {
                SendError(ErrorDefs.UsernamePasswordMismatch);
            }
        }
        public void avatargetrank(string username, string token, string ranktype, string count)
        {
            int icount = typeParser.intParse(count);

            if (icount <= 0 || icount > 100)
            {
                SendError("Invalid count " + count);
                return;
            }
            var iranktype = typeParser.intParse(ranktype);

            if (iranktype < 0 || iranktype >= (int)ERankType.RankNum)
            {
                SendError("Invalid ranktype " + ranktype);
                return;
            }
            var a = GetAvatar(username, token);

            if (a != null)
            {
                switch ((ERankType)iranktype)
                {
                case ERankType.Money:
                    var res = dbavatar.FindManyData(TableName, null
                                                    , ADBAccessor.projections(InfoNameDefs.AvatarName, InfoNameDefs.AvatarMoney, InfoNameDefs.AvatarHead)
                                                    , icount, 0, ADBAccessor.sort_Descending(InfoNameDefs.AvatarMoney));
                    var lres = new List <List <string> >();
                    foreach (var r in res)
                    {
                        var l = new List <string>();
                        l.Add(InfoNameDefs.AvatarName);
                        l.Add(r[InfoNameDefs.AvatarName].AsString);
                        if (r.Contains(InfoNameDefs.AvatarMoney))
                        {
                            l.Add(InfoNameDefs.AvatarMoney);
                            l.Add(r[InfoNameDefs.AvatarMoney].ToString());
                        }
                        if (r.Contains(InfoNameDefs.AvatarHead))
                        {
                            l.Add(InfoNameDefs.AvatarHead);
                            l.Add(r[InfoNameDefs.AvatarHead].AsInt32.ToString());
                        }
                        lres.Add(l);
                    }
                    SendError("rs", AWebServerUtils.ToJsonArray(lres.ToArray()));
                    return;
                }
                SendError("Invalid ranktype " + ranktype);
            }
        }
    internal string ToAll()
    {
        var l = new List <List <string> >();

        foreach (var item in dItems)
        {
            var ais = new List <string>();
            ais.Add("id");
            ais.Add(item.Key.ToString());
            ais.Add("count");
            ais.Add(item.Value.ToString());
            l.Add(ais);
        }
        return(AWebServerUtils.ToJsonArray(l.ToArray()));
    }
Example #7
0
        private static string AddUserToken(string username)
        {
            username = filtenames(username);
            var token = "";

            if (dUserTokens.ContainsKey(username))
            {
                token = dUserTokens[username];
            }
            else
            {
                token = AWebServerUtils.GetEncryptCode(12, 4);
                dUserTokens.Add(username, token);
            }
            return(token);
        }
        public HttpResponseMessage Login(string username, string password)
        {
            var res = ADatabaseConfigsManager.userDB.FindOneData(ADatabaseConfigsManager.tUserData, ADBAccessor.filter_eq(InfoNameDefs.Username, username) & ADBAccessor.filter_eq(InfoNameDefs.UserPassword, MD5String.Hash32(password)));

            if (res == null)
            {
                return(ResultToJson.GetErrorJsonResponse("Username and password mismatch."));
            }
            var token = "";

            if (res.Contains(InfoNameDefs.UserToken))
            {
                token = res[InfoNameDefs.UserToken].ToString();
            }
            else
            {
                token = AWebServerUtils.GetEncryptCode(12);
                ADatabaseConfigsManager.userDB.UpdateOneData(ADatabaseConfigsManager.tUserData, ADBAccessor.filter_eq(InfoNameDefs.Username, username), ADBAccessor.update(InfoNameDefs.UserToken, token));
            }
            return(ResultToJson.GetJsonResponse(InfoNameDefs.UserToken, res[InfoNameDefs.UserToken].ToString()));
        }
Example #9
0
        public HttpResponseMessage Register(string username, string password, string mail)
        {
            if (!mail.Contains("@") || !mail.Contains(".") || mail.IndexOf("@") > mail.IndexOf("."))
            {
                return(ResultToJson.GetErrorJsonResponse("Invalid mail address."));
            }

            if (username.Length < 4)
            {
                return(ResultToJson.GetErrorJsonResponse("Too short username."));
            }
            if (username.Length > 16)
            {
                return(ResultToJson.GetErrorJsonResponse("Too long username."));
            }

            var res = ADatabaseConfigsManager.userDB.FindOneData(ADatabaseConfigsManager.tUserData, ADBAccessor.filter_eq(InfoNameDefs.Username, username));

            if (res != null)
            {
                return(ResultToJson.GetErrorJsonResponse("Username registered."));
            }
            var token = AWebServerUtils.GetEncryptCode(12);
            var ures  = ADatabaseConfigsManager.userDB.UpdateOneData(ADatabaseConfigsManager.tUserData, ADBAccessor.filter_eq(InfoNameDefs.Username, username)
                                                                     , ADBAccessor.updates_build(
                                                                         ADBAccessor.update(InfoNameDefs.UserToken, token)
                                                                         , ADBAccessor.update(InfoNameDefs.Username, username)
                                                                         , ADBAccessor.update(InfoNameDefs.UserMail, mail)
                                                                         , ADBAccessor.update(InfoNameDefs.UserPassword, MD5String.Hash32(password))
                                                                         )
                                                                     , true);

            if (!ures)
            {
                return(ResultToJson.GetErrorJsonResponse(ErrorDefs.DBError));
            }

            ATokenManager.Instance.OnSetToken(username, token);
            return(ResultToJson.GetJsonResponse(InfoNameDefs.Username, username, InfoNameDefs.UserToken, token));
        }
Example #10
0
        public void wikilist(string page, string count)
        {
            var ipage  = typeParser.intParse(page);
            var icount = typeParser.intParse(count);
            List <List <string> > lr = new List <List <string> >();

            for (var i = (ipage + 1) * icount; i > ipage * icount; i--)
            {
                AWikiCell cell = null;
                if (dWikis.ContainsKey(i))
                {
                    cell = dWikis[i];
                }
                else
                {
                    var r = adb.FindOneData(TableName
                                            , ADBAccessor.filter_eq("i", i)
                                            , ADBAccessor.projections("i", "s", "t"));
                    if (r == null)
                    {
                        continue;
                    }
                    cell         = new AWikiCell();
                    cell.id      = r["i"].AsInt32;
                    cell.subject = r["s"].AsString;
                    cell.time    = r["t"].AsString;
                }

                var l = new List <string>();
                l.Add("i");
                l.Add(cell.id.ToString());
                l.Add("s");
                l.Add(cell.subject);
                l.Add("t");
                l.Add(cell.time);
                lr.Add(l);
            }
            SendError("r", AWebServerUtils.ToJsonArray(lr.ToArray()));
        }
    public static string ToJson(string avatarname, List <AFriend> friends)
    {
        var lfriends = new List <List <string> >();

        foreach (var f in friends)
        {
            var fn    = f.OnGetFriendName(avatarname);
            var finfo = AFriend.OnGetFriendInfo(fn);
            if (finfo == null)
            {
                AOutput.LogError("Cannot find friend info of " + fn);
                continue;
            }
            var fs = new List <string>();
            fs.Add(InfoNameDefs.AvatarName);
            fs.Add(fn);
            fs.Add(InfoNameDefs.AvatarHead);
            fs.Add(finfo.head.ToString());
            fs.Add("accid");
            fs.Add(finfo.accid);
            lfriends.Add(fs);
        }
        return(AWebServerUtils.ToJsonArray(lfriends.ToArray()));
    }
Example #12
0
        private async Task ProcessChat(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            string    user   = "";

            try
            {
                var allkeys = context.QueryString.AllKeys.ToList();
                if (allkeys.Contains("username") && allkeys.Contains("token"))
                {
                    user = context.QueryString["username"];
                    var token  = context.QueryString["token"];
                    var avatar = AWebServices.Avatar.OnGetAvatar(user, token);
                    if (avatar == null)
                    {
                        AOutput.Log("invalid token");
                        return;
                    }

                    #region 用户添加连接池
                    //第一次open时,添加到连接池中
                    if (!CONNECT_POOL.ContainsKey(user))
                    {
                        CONNECT_POOL.Add(user, new UserWithToken()
                        {
                            connect = socket
                        });                                                           //不存在,添加
                    }
                    else if (socket != CONNECT_POOL[user].connect)                    //当前对象不一致,更新
                    {
                        CONNECT_POOL[user].cancellationTokenSource.Cancel();
                        CONNECT_POOL[user] = new UserWithToken()
                        {
                            connect = socket
                        };
                    }
                    #endregion

                    await DoSend(CONNECT_POOL[user], AWebServerUtils.OnGetJsonError("0"));
                }
                else
                {
                    AOutput.Log("invalid argument");
                    return;
                }

                if (string.IsNullOrEmpty(user))
                {
                    return;
                }

                while (true)
                {
                    if (socket.State == WebSocketState.Open)
                    {
                        ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[1024]);
                        WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CONNECT_POOL[user].cancellationTokenSource.Token);

                        if (!CONNECT_POOL.ContainsKey(user) ||
                            CONNECT_POOL[user].connect != socket)
                        {
                            //已经被踢下线。
                            return;
                        }

                        #region 消息处理(字符截取、消息转发)
                        try
                        {
                            #region 关闭Socket处理,删除连接池
                            if (socket.State != WebSocketState.Open)                            //连接关闭
                            {
                                if (CONNECT_POOL.ContainsKey(user))
                                {
                                    CONNECT_POOL.Remove(user);                                                                //删除连接池
                                }
                                break;
                            }
                            #endregion

                            string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);                            //发送过来的消息
                            if (userMsg == "ping")
                            {
                                CONNECT_POOL[user].DoHeartBeat();
                                await DoSend(CONNECT_POOL[user], userMsg);
                            }
                            else
                            {
                                var amsg = userMsg.Split('?');
                                if (amsg[0] == "chat")
                                {
                                    AOutput.Log(user + " msg:" + userMsg);
                                    await DoChat(CONNECT_POOL[user], user, amsg[1]);
                                }
                            }
                        }
                        catch (Exception exs)
                        {
                            //消息转发异常处理,本次消息忽略 继续监听接下来的消息
                        }
                        #endregion
                    }
                    else
                    {
                        break;
                    }
                }                //while end
            }
            catch (Exception ex)
            {
                try
                {
                    AOutput.LogError("监听异常:" + ex.Message);
                    AOutput.LogError("异常堆栈:" + ex.StackTrace);
                }
                catch { }

                //整体异常处理
                if (!string.IsNullOrEmpty(user))
                {
                    if (CONNECT_POOL.ContainsKey(user))
                    {
                        CONNECT_POOL.Remove(user);
                    }
                }
            }
        }
 void SendDBError()
 {
     Context.Response.Write(AWebServerUtils.OnGetJsonError(ErrorDefs.DBError.ToString()));
 }
 void SendError(params string[] values)
 {
     Context.Response.Write(AWebServerUtils.OnGetJsonError(values));
 }
 void SendError(HttpResponse response, params string[] values)
 {
     response.Write(AWebServerUtils.OnGetJsonError(values));
 }