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); } }
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())); }
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())); }
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())); }
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)); }
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())); }
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)); }