Exemple #1
0
        /// <summary>
        /// 聊天计费
        /// </summary>
        /// <param name="client"></param>
        /// <param name="buffer"></param>
        private void ProChatFee(CommuTcpClient client, byte[] buffer)
        {
            ChatFee chatFee = new ChatFee(buffer);

            OnRaiseMsgRecvEvent(client, chatFee.ToString());
            ChatFeeResp chatFeeResp = new ChatFeeResp(chatFee.Header.Sequence_Id);
            //处理计费业务
            List <PushPDian> pushPList = new List <PushPDian>();
            var result     = (true, "");
            var key        = client.Nodeid.ToString() + chatFee.Header.Sequence_Id;
            var chatFeeHis = pXinDb.GetChatFeeHisBySeq(client.Nodeid.ToString() + chatFee.Header.Sequence_Id);

            if (chatFeeHis.Hisid == 0)//判断是否是丢包情况重发
            {
                if (!string.IsNullOrEmpty(chatFee.Body.Receiver))
                {
                    result = HandChatFeeBusiness(chatFee, client.Nodeid, pushPList);
                }
                else
                {
                    result = (false, "无效参数:Receiver");
                }
            }
            var tpxinUserinfo = pXinDb.GetUserInfoByNodeId(client.Nodeid);

            chatFeeResp.Body.FeeType = chatFee.Body.FeeType;
            chatFeeResp.Body.Status  = result.Item1 == true?Convert.ToUInt32(1) : Convert.ToUInt32(0);

            chatFeeResp.Body.StatusDesc   = result.Item1 == true ? "成功" : result.Item2;
            chatFeeResp.Body.VDianBalance = tpxinUserinfo.V;
            chatFeeResp.Body.PDianBalance = tpxinUserinfo.P;
            client.SendData(chatFeeResp.ToBytes());
            if (result.Item1)
            {
                if (chatFee.Body.ReceiveType == 1)//接收者类型为用户
                {
                    int receiverid = 0;
                    Int32.TryParse(chatFee.Body.Receiver, out receiverid);
                    var pushPDian = pushPList.FirstOrDefault(p => p.NodeId == receiverid);
                    PushReceive(pushPDian);
                }
                else if (chatFee.Body.ReceiveType == 2 || chatFee.Body.ReceiveType == 3) //接收者类型为群时
                {
                    foreach (var item in pushPList)                                      //遍历群成员进行推送
                    {
                        PushReceive(item);
                    }
                }
            }
        }
Exemple #2
0
        private void ProChatFeeResp()
        {
            ChatFeeResp chatFeeResp = new ChatFeeResp(_buffer);

            OnRaiseMsgRecvEvent(chatFeeResp.Header.Command_Id, chatFeeResp, "接收消息:" + chatFeeResp.ToString());
        }
        private void OnRaiseMsgSendEvent(byte[] buffer)
        {
            if (MsgSendEventHandler != null)
            {
                string        msg    = string.Empty;
                MessageHeader header = new MessageHeader(buffer);
                switch (header.Command_Id)
                {
                case PXin_COMMAND_TYPE.Login:
                    msg = new Login(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.LoginResp:
                    msg = new LoginResp(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.Logout:
                    msg = new Wt_Logout(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.LogoutResp:
                    msg = new LogoutResp(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.Active:
                    msg = new Active(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ActiveResp:
                    msg = new ActiveResp(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFee:
                    msg = new ChatFee(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeeResp:
                    msg = new ChatFeeResp(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeePush:
                    msg = new ChatFeePush(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeeRateSet:
                    msg = new ChatFeeRateSet(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeeRateSetResp:
                    msg = new ChatFeeRateSetResp(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeeRateQuery:
                    msg = new ChatFeeRateQuery(buffer).ToString();
                    break;

                case PXin_COMMAND_TYPE.ChatFeeRateQueryResp:
                    msg = new ChatFeeRateQueryResp(buffer).ToString();
                    break;

                default:
                    break;
                }
                //发布"消息发送"事件
                if (header.Command_Id != PXin_COMMAND_TYPE.Active && header.Command_Id != PXin_COMMAND_TYPE.ActiveResp)
                {
                    MsgSendEventHandler?.Invoke(this, new MessageEventArgs(string.Empty, Identity, msg));
                }
            }
        }