Commit 8d26ca04 by Li Feifei

Merge branch 'develop' of http://gitlab.offcncloud.com/lff58407/im-microservice into develop

parents 74a55d2a a21c2425
......@@ -32,8 +32,8 @@ func GetNowTime() string {
var ctx = context.Background()
func GetCode(mobile string) (string, error) {
val, err := db.RedisClient.Get(ctx, mobile).Result()
func GetRedis(field string) (string, error) {
val, err := db.RedisClient.Get(ctx, field).Result()
if err != nil {
return "", err
}
......@@ -41,6 +41,16 @@ func GetCode(mobile string) (string, error) {
return val, nil
}
func SetRedis(fieldKey string, val string) error {
err := db.RedisClient.Set(ctx, fieldKey, val, 0).Err()
return err
}
func DelRedis(fieldKey string) error {
err := db.RedisClient.Del(ctx, fieldKey).Err()
return err
}
func Paginate(count, step, page int64) (int64, int64) {
offset := step * (page - 1)
total := int64(math.Ceil(float64(count) / float64(step)))
......
......@@ -6,6 +6,7 @@ import (
"im-microservice/pb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
......@@ -32,6 +33,11 @@ type ImUserQ struct {
//注册
func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserRegReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
// 是否已经注册过, 如果已经注册返回用户信息
if c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey); c_user.Accid != "" {
err = status.Error(10438, "用户已存在")
......@@ -52,6 +58,11 @@ func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest)
//修改用户信息
func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
//查询用户是否存在
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Token == "" {
......@@ -95,14 +106,19 @@ func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (re
//用户登录
func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserRegReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
//获取用户信息
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Token == "" {
err = status.Error(404, "用户不存在")
return
}
//更新用户登录时间
_, err = LoginHandle(c_user.Id, in.GetPlatform())
//用户登录处理
err = LoginHandle(in)
if err != nil {
//err = status.Error(500, "用户登录时间更新失败")
return
......@@ -116,14 +132,18 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginReques
//用户退出
func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Accid == "" {
err = status.Error(404, "用户不存在")
return
}
_, err = LoginOutHandle(c_user.Id, in.GetPlatform())
err = LoginOutHandle(in)
if err != nil {
err = status.Error(500, "数据库操作失败")
return
}
......@@ -133,6 +153,11 @@ func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginReq
//用户禁言
func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
var mute int64 = 0
if in.GetMute() == true {
mute = 1
......@@ -160,6 +185,11 @@ func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSe
//用户禁音视频
func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
var mute int64 = 0
if in.GetMute() == true {
mute = 1
......@@ -188,7 +218,11 @@ func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRe
//获取用户信息
func (u *ImUserServer) ImUserOne(ctx context.Context, in *pb.ImUserOneRequest) (reply *pb.ImUserOneReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
reply = &pb.ImUserOneReply{}
c_user, err := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if err != nil {
......
package im_user
import (
"im-microservice/pb"
//"fmt"
//"errors"
"im-microservice/db"
"bytes"
"encoding/json"
"im-microservice/helper"
//"im-microservice/pb"
"github.com/astaxie/beego/orm"
//"github.com/astaxie/beego/orm"
"google.golang.org/grpc/status"
)
const (
ul_table_name = "im_user_login"
ul_user_id = "user_id"
ul_login_status = "login_status"
ul_updatetime = "updatetime"
ul_platform = "platform"
)
//用户登录处理
func LoginHandle(user_id int64, platform string) (db.ImUserLogin, error) {
func LoginHandle(in *pb.ImUserLoginRequest) error {
loginMap := make(map[int]map[string]interface{})
loginOne := map[string]interface{}{
"platform": in.Platform,
"Updatetime": helper.GetNowTime(),
}
num := 1
//查询该设备平台是否已经存在数据
log_user, err := GetLogin(user_id, platform)
if err != nil {
//插入数据
log_user.LoginStatus = 1
log_user.Platform = platform
log_user.Updatetime = helper.GetNowTime()
log_user.UserId = user_id
_, err := db.MysqlClient.Insert(&log_user)
if err != nil {
return log_user, err
}
} else {
//修改数据
if err := UpdateLogin(user_id, platform, 1); err != nil {
return log_user, err
var buffer bytes.Buffer
buffer.WriteString(in.Accid)
buffer.WriteString("_")
buffer.WriteString(in.Common.Appkey)
fieldKey := buffer.String()
jsonStr, err := helper.GetRedis(fieldKey)
if err == nil {
//不是第一次登录了
json.Unmarshal([]byte(jsonStr), &loginMap)
for _, m := range loginMap {
if m["platform"] == in.Platform {
err = status.Error(417, "该种设备已经登录了")
return err
}
num += 1
}
log_user.LoginStatus = 1
}
return log_user, nil
}
//用户退出
func LoginOutHandle(user_id int64, platform string) (db.ImUserLogin, error) {
//查询登录信息
log_user, err := GetLogin(user_id, platform)
loginMap[num] = loginOne
loginJson, _ := json.Marshal(loginMap)
err = helper.SetRedis(fieldKey, string(loginJson))
if err != nil {
err = status.Error(500, "用户还没有登录信息")
return log_user, err
}
//修改
if err := UpdateLogin(user_id, platform, 0); err != nil {
return log_user, err
return err
}
return log_user, nil
return nil
}
//查询
func GetLogin(user_id int64, platform string) (db.ImUserLogin, error) {
var log_user db.ImUserLogin
err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).One(&log_user)
if err != nil {
return log_user, err
//用户退出处理
func LoginOutHandle(in *pb.ImUserLoginRequest) error {
loginMap := make(map[int]map[string]interface{})
var buffer bytes.Buffer
buffer.WriteString(in.Accid)
buffer.WriteString("_")
buffer.WriteString(in.Common.Appkey)
fieldKey := buffer.String()
jsonStr, err := helper.GetRedis(fieldKey)
if jsonStr == "" {
err = status.Error(404, "没有登录信息")
return err
}
json.Unmarshal([]byte(jsonStr), &loginMap)
var num int
n := 0
for k, m := range loginMap {
if m["platform"] == in.Platform {
num = k
}
n += 1
}
if n == 1 {
err = helper.DelRedis(fieldKey)
return err
}
return log_user, nil
}
//修改
func UpdateLogin(user_id int64, platform string, login_status int64) error {
orm_params := make(orm.Params)
orm_params[ul_login_status] = login_status
orm_params[ul_updatetime] = helper.GetNowTime()
_, err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).Update(orm_params)
delete(loginMap, num)
loginJson, _ := json.Marshal(loginMap)
err = helper.SetRedis(fieldKey, string(loginJson))
if err != nil {
err = status.Error(500, err.Error())
return err
}
return err
return nil
}
// //用户登录处理
// func LoginHandle(in *pb.ImUserLoginRequest) (db.ImUserLogin, error) {
// //查询该设备平台是否已经存在数据
// var buffer bytes.Buffer
// buffer.WriteString(in.Accid)
// buffer.WriteString("_")
// buffer.WriteString(in.Common.Appkey)
// log_user, err := helper.GetRedis(buffer.String())
// if err != nil {
// //插入数据
// log_user.LoginStatus = 1
// log_user.Platform = platform
// log_user.Updatetime = helper.GetNowTime()
// log_user.UserId = user_id
// _, err := db.MysqlClient.Insert(&log_user)
// if err != nil {
// return log_user, err
// }
// } else {
// //修改数据
// if err := UpdateLogin(user_id, platform, 1); err != nil {
// return log_user, err
// }
// log_user.LoginStatus = 1
// }
// return log_user, nil
// }
// //用户退出
// func LoginOutHandle(user_id int64, platform string) (db.ImUserLogin, error) {
// //查询登录信息
// log_user, err := GetLogin(user_id, platform)
// if err != nil {
// err = status.Error(500, "用户还没有登录信息")
// return log_user, err
// }
// //修改
// if err := UpdateLogin(user_id, platform, 0); err != nil {
// return log_user, err
// }
// return log_user, nil
// }
// //查询
// func GetLogin(user_id int64, platform string) (db.ImUserLogin, error) {
// var log_user db.ImUserLogin
// err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).One(&log_user)
// if err != nil {
// return log_user, err
// }
// return log_user, nil
// }
// //修改
// func UpdateLogin(user_id int64, platform string, login_status int64) error {
// orm_params := make(orm.Params)
// orm_params[ul_login_status] = login_status
// orm_params[ul_updatetime] = helper.GetNowTime()
// _, err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).Update(orm_params)
// if err != nil {
// err = status.Error(500, err.Error())
// return err
// }
// return err
// }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment