/// <summary> /// 消息发送时的内部方法,将逻辑结构体数据存放到ls中 /// 子类无需重载 /// </summary> public void SetByte <T>(T t, ref LusuoStream ls) { ls.WriteInt(0); // 预留总字节数 ls.WriteUShort(msgID); // 写消息编号 ls.WriteInt(eno); // 写eno byte[] bytes = ProtobufHelper.Serialize <T>(t); ls.Write(ref bytes); // 写具体结构体 ls.Seek(0); // 内容字节数 int contentLen = StringHelper.s_ShortSize + StringHelper.s_IntSize + bytes.Length; ls.WriteInt(contentLen); // 再次写内容长度 msgMaxLen = StringHelper.s_IntSize + contentLen; // 长度字节数 + 内容字节数 }
/// <summary> /// 登录方法 /// </summary> /// <param name="db"></param> /// <param name="lmodel"></param> /// <returns></returns> public ResultJson Logins(SqlSugarClient db, vLoginModel lmodel) { var json = new ResultJson() { backurl = "/fytadmin/index/" }; var model = db.Queryable <sysadmin>().Single(m => m.LoginName == lmodel.loginname); if (model != null) { LogProvider.Error(LoggerEnums.Info.ToString(), DES3Encrypt.EncryptString(lmodel.password)); if (model.LoginPwd.Equals(DES3Encrypt.EncryptString(lmodel.password))) { //判断是否冻结 if (model.Status) { json.data = model; //根据管理员的角色ID查询菜单,目前支持模块化权限验证 var roleModel = db.Queryable <sysrolemenu>().Where(m => m.RoleID == model.RoleID).ToList(); var mlist = roleModel.Select(item => item.MenuID).ToList(); //根据角色关联的菜单ID,查询菜单集合 var menuList = db.Queryable <sysmenu>().Where(m => mlist.Contains(m.ID)).ToList(); var adminModel = new AdminModel() { ID = model.ID, sysadmin = model, sysMenu = menuList }; //将用户登录信息保存的session中 SessionHelper.SetSession(KeyHelper.SESSION_ADMIN_INFO, ProtobufHelper.Serialize(adminModel)); //将登录ID保存到cookie中 CookieHelper.SetCookie(KeyHelper.COOKIE_ADMIN_USERID, DES3Encrypt.EncryptString(model.ID.ToString()), 1); } else { json.status = 403; json.msg = "您的账号被冻结,请联系管理员~"; } } else { json.status = 402; json.msg = "密码错误~"; } } else { json.status = 401; json.msg = "用户名错误~"; } return(json); }
public void SendMessage <T>(ushort msgID, T t) { LusuoStream stream = new LusuoStream(new byte[m_uBufferSize]); stream.WriteInt(0); // 预留总字节数 stream.WriteUShort(msgID); // 写消息编号 stream.WriteInt(1); byte[] bytes = ProtobufHelper.Serialize <T>(t); stream.Write(ref bytes); // 写具体结构体 stream.Seek(0); // 内容字节数 int contentLen = StringHelper.s_ShortSize + StringHelper.s_IntSize + bytes.Length; stream.WriteInt(contentLen); // 再次写内容长度 stream.m_byteLen = StringHelper.s_IntSize + contentLen; // 长度字节数 + 内容字节数 _m_listMsg.Add(stream); }
public void ProtobufPost() { var stream = new MemoryStream(); ProtobufHelper.Serialize(stream, _dtos); stream.Seek(0, SeekOrigin.Begin); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "api/Values") { Content = new StreamContent(stream) }; httpRequestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-protobuf"); httpRequestMessage.Headers.Add("Accept", "application/x-protobuf"); // HTTP POST with Protobuf Request Body var responseForPost = _protobufHttpClient.SendAsync(httpRequestMessage); var result = ProtobufHelper.Deserialize <List <TestDto> >( responseForPost.Result.Content.ReadAsStreamAsync().Result); }
public void TestProtobuf() { var client = _server.CreateClient(); var dtos = GetDtos(); var stream = new MemoryStream(); ProtobufHelper.Serialize(stream, dtos); stream.Seek(0, SeekOrigin.Begin); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "api/Values/Post") { Content = new StreamContent(stream) }; httpRequestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-protobuf"); httpRequestMessage.Headers.Add("Accept", "application/x-protobuf"); // HTTP POST with Protobuf Request Body var response = client.SendAsync(httpRequestMessage).Result; var result = ProtobufHelper.Deserialize <List <TestDto> >( response.Content.ReadAsStreamAsync().Result); Assert.True(CompareDtos(dtos, result)); }
public static byte[] ToProtoBuf <T>(this T obj) { return(ProtobufHelper.Serialize(obj)); }