简易聊天系统-群组服务

群组服务负责群组日常管理,申请进群,创建群,获取群成员,与用户服务类似。

基本代码如下:

func DealMsg(delivery *amqp.Delivery) {
	var json = jsoniter.ConfigCompatibleWithStandardLibrary
	var transfer1 transfer
	err := json.Unmarshal(delivery.Body, &transfer1)
	Type := transfer1.Data.Type
	if err != nil {
		fmt.Println(err)
		return
	}

	switch Type {
	case CreateGroup:
		CreateGroupRequest(delivery, &transfer1)
	case GetGroupList:
		GetGroupListRequest(delivery, &transfer1)
	case GetGroupMember:
		GetGroupMemberRequest(delivery, &transfer1)
	case JoinGroup:
		JoinGroupDeal(delivery, &transfer1)
	case OtherAddGroup:
		DealAddGroupResult(delivery, &transfer1)
	case ServerInviteUserAddGroup:
		ServerInviteUserAddGroupS(delivery, &transfer1)
	}
	fmt.Println(string(delivery.Body))

}


// 服务邀请直接进群
func ServerInviteUserAddGroupS(delivery *amqp.Delivery, transfer1 *transfer) {
	Ack := false
	defer func() {
		delivery.Ack(Ack)
		fmt.Println("ACK", Ack)
	}()
	var add ServerAddGroupStruct
	err := mapstructure.Decode(transfer1.Data.Data, &add)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS json err :", err)
		return
	}
	// 判断群是否存在
	group, err := GetGroupInfoSimply(add.GroupId)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS json err :", err)
		return
	}
	// 群不存在
	if group.Id != add.GroupId {
		Ack = true
		return
	}

	// 判断是否在群
	r, err := IsGroupMember(add.Userid, add.GroupId)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS", err)
		return
	}
	// 不在群直接拉进去
	if r {
		Ack = true
		return
	}

	// 数据库存储
	err = msql.MemberAddGroup(add.Userid, add.GroupId)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS  err :", err)
		return
	}
	// 更新redis
	err = UpdateGroupMembers(add.GroupId)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS  err :", err)
		return
	}

	// 用户成功加入群 通知其他在线群员
	members, err := GetGroupMemberList(add.GroupId)
	if err != nil {
		fmt.Println("ServerInviteUserAddGroupS", err)
		return
	}
	for _, member := range members {
		u, err := redisconn.RedisGetUser(member.User.Userid)
		if err != nil {
			fmt.Println("ServerInviteUserAddGroupS", err)
			continue
		}
		if u.Status == OnLine {
			var change GroupMemberChange
			change.GroupId = add.GroupId
			var json = jsoniter.ConfigCompatibleWithStandardLibrary
			data2, err := json.Marshal(change)
			if err != nil {
				fmt.Println("ServerInviteUserAddGroupS", err)
				continue
			}
			err = RabbitMqPublish(mq, data2, u.Userid, GroupMemberchange, u.GateWay)
			if err != nil {
				fmt.Println("ServerInviteUserAddGroupS", err)
				return
			}
			//	fmt.Println("通知其他在线群员")
		}
	}

	Ack = true
	//fmt.Println("处理完毕")

}

// 管理员处理加群
func DealAddGroupResult(delivery *amqp.Delivery, transfer1 *transfer) {
	Userid := transfer1.Id
	var re OtherDealAddGroupResult
	err := mapstructure.Decode(transfer1.Data.Data, &re)
	Ack := false
	defer func() {
		delivery.Ack(Ack)
		fmt.Println("ACK", Ack)
	}()
	if err != nil {
		fmt.Println("DealAddGroupResult json err :", err)
		return
	}
	// 判断数据库是否有此添加信息
	request, err := msql.GetRequest(re.Id)
	if err != nil {
		fmt.Println("DealAddGroupResult  err :", err)

		return
	}
	if len(request.id) == 0 {
		fmt.Println("DealAddGroupResult  没找到请求 :", err)
		Ack = true
		return
	}
	// 获取群信息
	g, err := GetGroupInfoSimply(request.ReceiveID)
	if err != nil {

		fmt.Println("DealAddGroupResult  err :", err)
		return
	}
	// 判断是否是管理员
	if Userid != g.GroupOwnerid {
		fmt.Println("DealAddGroupResult 不是管理员", Userid, request)
		Ack = true
		return
	}
	// 数据库更新请求
	var result int
	if re.Result {
		result = Agree
	} else {
		result = DisAgree
	}
	err = msql.UpdateRequest(re.Id, result)
	if err != nil {
		fmt.Println("DealAddGroupResult  err :", err)
		return
	}

	u, err := redisconn.RedisGetUser(request.SponsorID)
	if err != nil {
		fmt.Println("DealAddGroupResult  err :", err)
		return
	}
	// 同意进群
	if re.Result {
		//判断是否已经进群
		result, err := IsGroupMember(request.SponsorID, request.ReceiveID)
		if err != nil {
			fmt.Println("DealAddGroupResult  err :", err)
			return
		}
		if result {
			fmt.Println("DealAddGroupResult  已经进群", request.SponsorID)
			Ack = true
			return
		}
		// 数据库存储
		err = msql.MemberAddGroup(request.SponsorID, request.ReceiveID)
		if err != nil {
			fmt.Println("DealAddGroupResult  err :", err)
			return
		}
		// 更新redis
		err = UpdateGroupMembers(request.ReceiveID)
		if err != nil {
			fmt.Println("DealAddGroupResult  err :", err)
			return
		}

		if u.Status == OnLine {
			var addresult AddGroupResult
			addresult.Result = true
			addresult.Error = "群号:" + g.Id + "群名:" + g.GroupName + "加入成功!"
			var json = jsoniter.ConfigCompatibleWithStandardLibrary
			data2, err := json.Marshal(addresult)
			if err != nil {
				fmt.Println("JoinGroupDeal", err)
				return
			}
			err = RabbitMqPublish(mq, data2, u.Userid, JoinGroup, u.GateWay)
			if err != nil {
				fmt.Println("JoinGroupDeal", err)
				return
			}
		}
		//	fmt.Println("用户成功加入群 通知其他在线群员")
		// 用户成功加入群 通知其他在线群员
		members, err := GetGroupMemberList(g.Id)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		for _, member := range members {
			u, err := redisconn.RedisGetUser(member.User.Userid)
			if err != nil {
				fmt.Println("JoinGroupDeal", err)
				continue
			}
			if u.Status == OnLine {
				var change GroupMemberChange
				change.GroupId = g.Id
				var json = jsoniter.ConfigCompatibleWithStandardLibrary
				data2, err := json.Marshal(change)
				if err != nil {
					fmt.Println("JoinGroupDeal", err)
					continue
				}
				err = RabbitMqPublish(mq, data2, u.Userid, GroupMemberchange, u.GateWay)
				if err != nil {
					fmt.Println("JoinGroupDeal", err)
					return
				}
				//	fmt.Println("通知其他在线群员")
			}
		}
	} else {
		// 通知用户进群失败
		var addresult AddGroupResult
		addresult.Result = false
		addresult.Error = "群号:" + g.Id + "群名:" + g.GroupName + "拒绝加入!"
		var json = jsoniter.ConfigCompatibleWithStandardLibrary
		data2, err := json.Marshal(addresult)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		err = RabbitMqPublish(mq, data2, u.Userid, JoinGroup, u.GateWay)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		return

	}
	Ack = true
	fmt.Println("处理完毕")
}

// 加入群
func JoinGroupDeal(delivery *amqp.Delivery, transfer1 *transfer) {
	Userid := transfer1.Id
	var add AddGroupStruct
	err := mapstructure.Decode(transfer1.Data.Data, &add)
	if err != nil {
		fmt.Println("JoinGroupDeal json err :", err)
		return
	}
	// 判断群是否存在
	group, err := GetGroupInfoSimply(add.GroupId)
	if err != nil {
		fmt.Println("JoinGroupDeal json err :", err)
		return
	}
	// 群不存在
	if group.Id != add.GroupId {
		var addresult AddGroupResult
		addresult.Result = false
		addresult.Error = "群号不存在"
		var json = jsoniter.ConfigCompatibleWithStandardLibrary
		data2, err := json.Marshal(addresult)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		err = RabbitMqPublish(mq, data2, Userid, JoinGroup, transfer1.From)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		delivery.Ack(true)
		return
	}

	// 判断是否在群
	r, err := IsGroupMember(Userid, add.GroupId)
	if err != nil {
		fmt.Println("JoinGroupDeal", err)
		return
	}
	if r {
		var addresult AddGroupResult
		addresult.Result = false
		addresult.Error = "已经加入群:" + add.GroupId
		var json = jsoniter.ConfigCompatibleWithStandardLibrary
		data2, err := json.Marshal(addresult)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		err = RabbitMqPublish(mq, data2, Userid, JoinGroup, transfer1.From)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		delivery.Ack(true)
		return
	}

	// 判断是否有多个请求
	num, err := msql.GetRepeatRequest(Userid, add.GroupId, AddGroup, 1)
	if err != nil {
		fmt.Println("AddUserDeal", err)
		return
	}
	if num > 3 {
		var addresult AdduserResult
		addresult.Result = false
		addresult.Error = "添加该好友请求过多"
		var json = jsoniter.ConfigCompatibleWithStandardLibrary
		data2, err := json.Marshal(addresult)
		if err != nil {
			fmt.Println("AddUserDeal", err)
			return
		}
		err = RabbitMqPublish(mq, data2, Userid, AddUser, transfer1.From)
		if err != nil {
			fmt.Println("AddUserDeal", err)
			return
		}
		delivery.Ack(true)
		return
	}

	// 将请求存储起来
	sqlid, err := msql.SaveUserRequest(Userid, add.GroupId, AddGroup, "")
	if err != nil {
		fmt.Println("JoinGroupDeal", err)
		return
	}
	// 发送给申请者结果
	var addresult AddGroupResult
	addresult.Result = false
	addresult.Error = "申请成功,等待群主处理 群号:" + add.GroupId
	var json = jsoniter.ConfigCompatibleWithStandardLibrary
	data2, err := json.Marshal(addresult)
	if err != nil {
		fmt.Println("JoinGroupDeal", err)
		return
	}
	err = RabbitMqPublish(mq, data2, Userid, JoinGroup, transfer1.From)
	if err != nil {
		fmt.Println("JoinGroupDeal", err)
		return
	}
	// 判断群主是否在线
	GroupOwnerid := group.GroupOwnerid
	// 将其发送给被添加者
	u, err := redisconn.RedisGetUser(GroupOwnerid)
	if err != nil {
		fmt.Println("JoinGroupDeal", err)
		return
	}
	// 在线就将信息发送给用户
	if u != nil && (u.Status == OnLine && u.GateWay != "") {
		var o OtherDealAddUser
		// 首先
		user, err := GetUser(Userid)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		o.Sponsor = *user
		o.Id = sqlid
		var json = jsoniter.ConfigCompatibleWithStandardLibrary
		data3, err := json.Marshal(o)
		if err != nil {
			fmt.Println("JoinGroupDeal", err)
			return
		}
		RabbitMqPublish(mq, data3, u.Userid, OtherAddGroup, u.GateWay)
	}

	delivery.Ack(true)
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值