private void ConnectionList() { IPAddress ipaddress; EndPoint point; Socket sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ipaddress = IPAddress.Parse("192.168.2.54"); point = new IPEndPoint(ipaddress, int.Parse("2018")); sc.Connect(point); sc.Blocking = true; string openid = Guid.NewGuid().ToString(); SendLogin login = SendLogin.CreateBuilder() .SetOpenid(openid) .SetNickname("测试用户" + openid.Substring(0, 3)) .SetSex("1") .SetProvince("贵州") .SetCity("贵阳") .SetHeadimg("http://imgsrc.baidu.com/forum/pic/item/34aa0df3d7ca7bcb1620282fb8096b63f724a8ff.jpg") .SetUnionid(openid) .SetLatitude("0,0") .Build(); byte[] body = login.ToByteArray(); byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 1001, body.Length, 0, body); // if (clientSocket.Connected) //Connect(); sc.Send(data); ReceiveMessage(sc, openid); }
private void Deseriliz(byte[] body) { SendLogin login = ProtobufUtility.DeserializeProtobuf <SendLogin>(body); Debug.Log("login.city" + login.city); Debug.Log("login.headimg" + login.headimg); Debug.Log("login.Latitude" + login.Latitude); Debug.Log("login.nickname" + login.nickname); Debug.Log("login.openid" + login.openid); Debug.Log("login.province" + login.province); Debug.Log("login.sex" + login.sex); Debug.Log("login.unionid" + login.unionid); }
/// <summary> /// 发送登录信息 /// </summary> /// <param name="openid">玩家账号</param> /// <param name="nickname">玩家昵称</param> /// <param name="sex">玩家性别</param> /// <param name="province">玩家地址</param> /// <param name="city">玩家所在地</param> /// <param name="headimg">玩家头像</param> /// <param name="unionid">唯一标识符</param> public void SentUserLoginMessage(string openid, string nickname, string sex, string province, string city, string headimg, string unionid, string latitude) { // SendLogin login = SendLogin.CreateBuilder() // .SetOpenid(openid) // .SetNickname(nickname) // .SetSex(sex) // .SetProvince(province) // .SetCity(city) // .SetHeadimg(headimg) // .SetUnionid(unionid) // .SetLatitude(latitude) // .Build(); // byte[] body = login.ToByteArray(); SendLogin login = new SendLogin(); login.openid = openid; login.nickname = nickname; login.sex = sex; login.province = province; login.city = city; login.headimg = headimg; login.unionid = unionid; login.Latitude = latitude; Debug.Log(openid + "\t" + nickname + "\t" + sex + "\t" + province + "\t" + city + "\t" + headimg + "\t" + unionid + "\t" + latitude); byte[] body = ProtobufUtility.GetByteFromProtoBuf(login); byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 1001, body.Length, 0, body); // if (clientSocket.Connected) // Deseriliz(body); //-------------------------- Connect(); clientSocket.Send(data); }
public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { var loginInfo = SendLoginPW.ParseFrom(requestInfo.Body); dynamic info = null; string infoStr = string.Empty; if (loginInfo.HasCertificate)//如果有传证书 { infoStr = RoomCardUtility.GetloginInfoByCertStr(CompressUtility.DecompressString(loginInfo.Certificate)); if (string.IsNullOrEmpty(infoStr))//3证书无效 { byte[] msg = ReturnLogin.CreateBuilder().SetLoginstat(3).SetUserID(0).SetUserRoomCard(0).Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); return; } else { try { info = JsonConvert.DeserializeObject <dynamic>(infoStr); if ((DateTime.Now - ((DateTime)info.dateTime)).TotalHours >= 168)//证书过期 { byte[] msg = ReturnLogin.CreateBuilder().SetLoginstat(4).SetUserID(0).SetUserRoomCard(0).Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); return; } info.Score = RoomCardUtility.GetLongBaoNumber(info.ID.ToString()); } catch (Exception ex) { session.Logger.Error(ex); byte[] msg = ReturnLogin.CreateBuilder().SetLoginstat(3).SetUserID(0).SetUserRoomCard(0).Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); return; } } } else { infoStr = RoomCardUtility.GetloginInfoByPWD(loginInfo.UserAccount, loginInfo.Pwd); if (string.IsNullOrEmpty(infoStr) || JsonConvert.DeserializeObject <dynamic>(infoStr) == null) //5账号密码错误, { session.Logger.Debug(infoStr + "infoStr" + infoStr); byte[] msg = ReturnLogin.CreateBuilder().SetLoginstat(5).SetUserID(0).SetUserRoomCard(0).Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); return; } info = JsonConvert.DeserializeObject <dynamic>(infoStr); } SendLogin loginInfobuild = SendLogin.CreateBuilder().SetCity(loginInfo.City).SetHeadimg(string.IsNullOrEmpty(info.HeadImg1.ToString()) ?"1": string.Format("http://www.qytfkj.com{0}", info.HeadImg1)).SetLatitude(loginInfo.Latitude).SetNickname(info.TrueName.ToString()) .SetOpenid(info.ID.ToString()).SetProvince(loginInfo.Province).SetSex(info.Sex.ToString().Equals("1") ? "2" : "1").SetUnionid(info.ID.ToString()).Build(); var loginInfoByte = loginInfobuild.ToByteArray(); var login = new Login(); var json = new { ID = info.ID, Sex = info.Sex, HeadImg1 = info.HeadImg1, TrueName = info.TrueName, Score = info.Score, dateTime = DateTime.Now }; login.CerStr = CompressUtility.CompressString(RoomCardUtility.GetCertStrByloginInfoStr(JsonConvert.SerializeObject(json))); login.UserType = 1; login.UserLongBao = (long)info.Score; login.ExecuteCommand(session, new ProtobufRequestInfo { Body = loginInfoByte }); }
public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { System.Net.IPEndPoint clientipe = (System.Net.IPEndPoint)session.RemoteEndPoint; MsgLog msglog = new MsgLog(); session.Logger.Debug("登陆sssionID--------" + session.SessionID); string fileName = string.Empty; //文件名 string headImg = string.Empty; //头像图片 session.Logger.Debug("登录游戏----------" + DateTime.Now); var userinfo = SendLogin.ParseFrom(requestInfo.Body); mjuserinfo usermodel = new mjuserinfo(); mjuserinfo model = new mjuserinfo() { nickname = HttpUtility.UrlEncode(userinfo.Nickname), openid = userinfo.Openid, city = userinfo.City, headimg = userinfo.Headimg, province = userinfo.Province, unionid = userinfo.Unionid, sex = int.Parse(userinfo.Sex) }; usermodel = AddUser(model, session); session.Logger.Debug("登录用户openid:" + userinfo.Openid + "|昵称:" + userinfo.Nickname + "----------" + DateTime.Now); UserInfo olduser = Gongyong.userlist.Find(u => u.openid == userinfo.Openid); if (olduser == null) { UserInfo user = new UserInfo() { city = userinfo.City, //判断图片是否保存至图片服务器,保存相应头像地址 headimg = usermodel.headimg, nickname = userinfo.Nickname, openid = userinfo.Openid, province = userinfo.Province, session = session, sex = userinfo.Sex, unionid = userinfo.Unionid, Lat = userinfo.Latitude, UserID = int.Parse(usermodel.id.ToString()), UserIP = clientipe.Address.ToString() }; Gongyong.userlist.Add(user); ReturnLogin log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).Build(); byte[] msg = log.ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); session.Logger.Debug("登录游戏成功----------" + DateTime.Now); } else { if (olduser.session.Connected) { ReturnLogin log = ReturnLogin.CreateBuilder().SetLoginstat(2).SetUserID(int.Parse(usermodel.id.ToString())).Build(); byte[] msg = log.ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); session.Logger.Debug("登录游戏失败,当前对象存在----------" + DateTime.Now); session.Logger.Debug("sssionID--------" + session.SessionID); } else { mjuser mju = Gongyong.mulist.Find(u => u.Openid == userinfo.Openid); if (mju != null) { SendCL(session, userinfo.Openid, requestInfo); } olduser.session = session; ReturnLogin log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).Build(); byte[] msg = log.ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); session.Logger.Debug("登录游戏成功,当前对象存在----------" + DateTime.Now); } } }
public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { IPEndPoint clientipe = session.RemoteEndPoint; session.Logger.Debug("登陆sssionID--------" + session.SessionID); string fileName = string.Empty; //文件名 string headImg = string.Empty; //头像图片 session.Logger.Debug("登录游戏----------" + DateTime.Now); var userinfo = SendLogin.ParseFrom(requestInfo.Body); mjuserinfo usermodel = new mjuserinfo(); mjuserinfo model = new mjuserinfo() { nickname = userinfo.Nickname, openid = userinfo.Openid, city = userinfo.City, headimg = userinfo.Headimg, province = userinfo.Province, unionid = userinfo.Unionid, sex = int.Parse(userinfo.Sex), Oldheadimg = userinfo.Headimg, is_band = UserType }; usermodel = AddUser(model, session); session.Logger.Debug("登录用户openid:" + userinfo.Openid + "|昵称:" + userinfo.Nickname + "----------" + DateTime.Now); // UserInfo olduser = Gongyong.userlist.Find(u => u.openid == userinfo.Openid); RedisLoginModel olduser = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid)); if (olduser == null) { NewUserLogin(userinfo, usermodel, session, clientipe, GameInformationBase.serverName, requestInfo); } else if (olduser.ServerName.Equals(GameInformationBase.serverName)) { UserInfo userInfo = Gongyong.userlist.Find(u => u.openid == userinfo.Openid); // 可能会存在缓存服务器有用户信息,而服务器没有的情况。因此需要再次判断 if (userInfo == null) { NewUserLogin(userinfo, usermodel, session, clientipe, GameInformationBase.serverName, requestInfo); session.Logger.Debug("新登录用户openid:" + userinfo.Openid); } else if (userInfo.session.Connected) { ReturnLogin log = ReturnLogin.CreateBuilder().SetLoginstat(2).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(0).Build(); byte[] msg = log.ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); session.Logger.Debug("登录游戏失败,当前对象存在----------" + DateTime.Now); session.Logger.Debug("sssionID--------" + session.SessionID); } else { session.Logger.Debug("登录游戏成功,当前对象存在----------" + DateTime.Now); var redisUserInfo = RedisUtility.Get <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userinfo.Openid, userinfo.Unionid)); // UserInfo user = Gongyong.userlist.Find(u => u.openid == userinfo.Openid); userInfo.city = userinfo.City; //判断图片是否保存至图片服务器,保存相应头像地址 userInfo.headimg = usermodel.headimg; userInfo.nickname = userinfo.Nickname; userInfo.openid = userinfo.Openid; userInfo.province = userinfo.Province; userInfo.session = session; userInfo.sex = userinfo.Sex; userInfo.unionid = userinfo.Unionid; userInfo.Lat = userinfo.Latitude; userInfo.UserID = long.Parse(usermodel.id.ToString()); userInfo.UserIP = clientipe.Address.ToString(); userInfo.GroupID = groupStaffInfoDAL.GetGroupIDByUserID(usermodel.id).ToList(); userInfo.Type = UserType; //userInfo.GroupID.AddRange(groupInfoDAL.GetGroupIDByUserID(usermodel.id));//因为圈主 不存在圈子成员表中, 所以需要单独再添加一次 RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.Openid, userinfo.Unionid), new RedisUserInfoModel(userInfo)); // mjuser mju = Gongyong.mulist.Find(u => u.Openid == userinfo.Openid); bool isSendCL = false; if (redisUserInfo != null && redisUserInfo.RoomID != 0) { //SendCL(session, userinfo.Openid, requestInfo); isSendCL = RedisUtility.GetServerIP(redisUserInfo.ServerName, requestInfo.MessageNum, session, 2, userinfo.Openid, userinfo.Unionid, true, redisUserInfo.RoomID);//2为有未结束的游戏 } //UserClient userClient = new UserClient(); //userClient.UpdateUserInfo(new registrationactivitiesModel { GameUserID = userInfo.UserID.ToString(), HeadImgurl = userInfo.headimg, UnionID = userInfo.unionid, LastTime = DateTime.Now, NickName = userInfo.nickname }); //var resultData = JsonConvert.DeserializeObject<ResultData>(userClient.GetGameCurrency(userInfo.unionid)).Data; long roomCard = 0; roomCard = UserType == 1 ? UserLongBao : RoomCardUtility.GetRoomCard(userInfo.UserID); //long.TryParse(resultData == null ? "0" : resultData.ToString(), out roomCard); userInfo.session = session; var log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(roomCard); if (!string.IsNullOrEmpty(CerStr)) { log.SetCertificate(CerStr);//返回证书 log.SetUnionid(userInfo.unionid); log.SetHeadimg(userInfo.headimg); log.SetUserName(userInfo.nickname); } byte[] msg = log.Build().ToByteArray(); // if(!isSendCL) session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); var list = new AnnouncementDAL().GetAnnouncement();//获取公告列表 var returnAnnouncement = ReturnAnnouncement.CreateBuilder(); foreach (var item in list) { returnAnnouncement.AddAnnouncement(AnnouncementInfo.CreateBuilder().SetTitle(item.Title).SetContent(item.Content).Build()); } var dataInfo = returnAnnouncement.Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 8001, dataInfo.Length, requestInfo.MessageNum, dataInfo))); session.Logger.Debug("登录游戏成功,当前对象存在----------" + DateTime.Now); } } else//如果用户登录的服务器不是当前服务器,则返回登录的服务器IP和端口 { UserInfo userInfo = Gongyong.userlist.Find(u => u.openid == userinfo.Openid); var log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(0); if (!string.IsNullOrEmpty(CerStr)) { log.SetCertificate(CerStr);//返回证书 log.SetUnionid(userInfo.unionid); log.SetHeadimg(userInfo.headimg); log.SetUserName(userInfo.nickname); } byte[] msg = log.Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); RedisUtility.GetServerIP(olduser.ServerName, requestInfo.MessageNum, session, 1, userinfo.Openid, userinfo.Unionid);//2为有未结束的游戏 session.Logger.Debug("有未结束的游戏"); } }
/// <summary> /// 新用户登录信息保存 /// </summary> /// <param name="userinfo"></param> /// <param name="usermodel"></param> /// <param name="session"></param> /// <param name="clientipe"></param> /// <param name="serverName"></param> /// <param name="requestInfo"></param> private void NewUserLogin(SendLogin userinfo, mjuserinfo usermodel, GameSession session, IPEndPoint clientipe, string serverName, ProtobufRequestInfo requestInfo) { UserInfo user = new UserInfo() { city = userinfo.City, //判断图片是否保存至图片服务器,保存相应头像地址 headimg = usermodel.headimg, nickname = userinfo.Nickname, openid = userinfo.Openid, province = userinfo.Province, session = session, sex = userinfo.Sex, unionid = userinfo.Unionid, Lat = userinfo.Latitude, UserID = usermodel.id, UserIP = clientipe.Address.ToString(), GroupID = groupStaffInfoDAL.GetGroupIDByUserID(usermodel.id).ToList(), Type = UserType, ConnTime = DateTime.Now }; var redisUserInfo = RedisUtility.Get <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userinfo.Openid, userinfo.Unionid)); //user.GroupID.AddRange(groupInfoDAL.GetGroupIDByUserID(usermodel.id));//因为圈主 不存在圈子成员表中, 所以需要单独再添加一次 // UserClient userClient = new UserClient(); // userClient.UpdateUserInfo(new registrationactivitiesModel { GameUserID = user.UserID.ToString(), HeadImgurl = user.headimg, UnionID = user.unionid, LastTime = DateTime.Now, NickName = user.nickname }); //var resultData = JsonConvert.DeserializeObject <ResultData> (userClient.GetGameCurrency(user.unionid)).Data; long roomCard = roomCard = UserType == 1 ? UserLongBao : RoomCardUtility.GetRoomCard(user.UserID); // long.TryParse(resultData == null ?"0":resultData.ToString(), out roomCard); //resultData==null?"0": resultData.ToString()//userClient.GetGameCurrencyList(user.unionid)//resultData ? Convert.ToInt64(resultData.Data) : 0; Gongyong.userlist.Add(user); RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid), new RedisLoginModel { Openid = userinfo.Openid, ServerName = serverName, Unionid = userinfo.Unionid }); RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.Openid, userinfo.Unionid), new RedisUserInfoModel(user)); var A = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid)); var log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(roomCard); if (!string.IsNullOrEmpty(CerStr)) { log.SetCertificate(CerStr);//返回证书 log.SetUnionid(user.unionid); log.SetHeadimg(user.headimg); log.SetUserName(user.nickname); } byte[] msg = log.Build().ToByteArray(); bool isSendCL = false; if (redisUserInfo != null && redisUserInfo.RoomID != 0) { //SendCL(session, userinfo.Openid, requestInfo); isSendCL = RedisUtility.GetServerIP(redisUserInfo.ServerName, requestInfo.MessageNum, session, 2, userinfo.Openid, userinfo.Unionid, true, redisUserInfo.RoomID);//2为有未结束的游戏 } // if (!isSendCL) session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg))); var list = new AnnouncementDAL().GetAnnouncement();//获取公告列表 var returnAnnouncement = ReturnAnnouncement.CreateBuilder(); foreach (var item in list) { returnAnnouncement.AddAnnouncement(AnnouncementInfo.CreateBuilder().SetTitle(item.Title).SetContent(item.Content).Build()); } var data = returnAnnouncement.Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 8001, data.Length, requestInfo.MessageNum, data))); session.Logger.Debug("登录游戏成功----------" + DateTime.Now); }