Ejemplo n.º 1
0
        /// <summary>
        /// 聊天计费倍率设置
        /// </summary>
        /// <param name="messageString"></param>
        private void ProChatFeeRateSet(string messageString)
        {
            var client = _connections.GetConnection(Context.ConnectionId);

            if (client == null || client.Nodeid == 0)
            {
                this.OnReconnected();
                return;
            }
            var chatFeeRateSet = new ChatFeeRateSet(messageString);

            MessageInfo("调用聊天计费倍率设置逻辑之前");
            var result = chatFeeRateFacade.ProChatFeeRateSet(chatFeeRateSet.ToBytes(), client.Nodeid);

            MessageInfo("调用聊天计费倍率设置逻辑之后");
            if (result.Count == 0)
            {
                MessageInfo("调用聊天计费倍率设置逻辑失败");
            }
            foreach (var item in result)
            {
                var receiveClient = _connections.GetConnections().Values.FirstOrDefault(c => c.Nodeid == item.GetNodeid());
                SendChatMessage(receiveClient, item.ToJson());
            }
        }
Ejemplo n.º 2
0
        private void btnSetRate_Click(object sender, EventArgs e)
        {
            ChatFeeRateSet chatFeeRateSet = new ChatFeeRateSet();

            chatFeeRateSet.Body.Type     = 2;
            chatFeeRateSet.Body.Rate     = Convert.ToDecimal(txtRate.Text);
            chatFeeRateSet.Body.Sender   = 0;
            chatFeeRateSet.Body.Receiver = 481;
            _client.SendMessageRateSet(chatFeeRateSet);
        }
Ejemplo n.º 3
0
        private void btnSetRate_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtRate.Text))
            {
                MessageBox.Show("倍率必填");
                return;
            }
            if (string.IsNullOrWhiteSpace(textBox2.Text))
            {
                MessageBox.Show("senderid必填");
                return;
            }
            var rate     = Convert.ToDecimal(txtRate.Text);
            var typeid   = int.Parse(comboBox2.Text);
            var senderid = int.Parse(textBox2.Text);

            string[] arrLine = File.ReadAllLines("nodeids.txt");
            if (arrLine == null)
            {
                MessageBox.Show("根目录配置nodeids.txt");
                return;
            }
            int i = 0;

            System.Threading.Tasks.Task.Run(() =>
            {
                foreach (TcpClient client in lstClient.Values)
                {
                    try
                    {
                        ChatFeeRateSet chatFeeRateSet = new ChatFeeRateSet();
                        chatFeeRateSet.Body.Type      = typeid;
                        chatFeeRateSet.Body.Rate      = rate;
                        chatFeeRateSet.Body.Sender    = typeid == 1 ? senderid : 0;
                        chatFeeRateSet.Body.Receiver  = typeid == 1 ? int.Parse(arrLine[i]) : senderid;
                        RateSet(client, chatFeeRateSet);
                        i++;
                    }
                    catch (Exception ex)
                    {
                        Log.ExceptInfo(ex.ToString());
                        i++;
                    }
                }
            });
            while (i < lstClient.Count)
            {
                Thread.Sleep(1000);
            }
            MessageBox.Show("完成");
        }
Ejemplo n.º 4
0
 private void RateSetPush(int nodeId, ChatFeeRateSet chatFeeRateSet, TchatRate tchatRate)
 {
     if (chatFeeRateSet.Body.Type == 1 && chatFeeRateSet.Body.Sender > 0)//当为私聊且在聊天中时推送
     {
         var ratePush = new PushRate()
         {
             NodeId = chatFeeRateSet.Body.Sender, Rate = tchatRate.Rate, SNodeId = chatFeeRateSet.Body.Receiver
         };
         var pxinUser = pXinDb.GetReginfoByNodeid(chatFeeRateSet.Body.Sender);
         if (pxinUser.Isenterprise == 3)//当用户是达人时
         {
             ratePush.Rate = 1;
         }
         RateSetPush(ratePush);
     }
     else //接收者类型为群时
     {
         List <PushRate> pushRates = new List <PushRate>();
         var             userIds   = pXinDb.GetGroupUserId(chatFeeRateSet.Body.Receiver).Where(p => p != nodeId).ToList();
         if (chatFeeRateSet.Body.Type == 3)//通用倍率
         {
             userIds = pXinDb.GetTchatFriendNodeIds(chatFeeRateSet.Body.Receiver);
         }
         userIds.ForEach(p =>
         {
             pushRates.Add(new PushRate
             {
                 NodeId  = p,
                 Rate    = tchatRate.Rate,
                 SNodeId = chatFeeRateSet.Body.Receiver
             });
         });
         foreach (var item in pushRates)//遍历群成员进行推送
         {
             RateSetPush(item);
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 聊天计费倍率设置
        /// </summary>
        /// <param name="client"></param>
        /// <param name="buffer"></param>
        private void ProChatFeeRateSet(CommuTcpClient client, byte[] buffer)
        {
            ChatFeeRateSet chatFeeRateSet = new ChatFeeRateSet(buffer);

            OnRaiseMsgRecvEvent(client, chatFeeRateSet.ToString());
            TchatRate tchatRate = new TchatRate();

            tchatRate.Typeid     = chatFeeRateSet.Body.Type;
            tchatRate.Sender     = chatFeeRateSet.Body.Sender;//0;
            tchatRate.Receiver   = chatFeeRateSet.Body.Receiver;
            tchatRate.Rate       = chatFeeRateSet.Body.Rate;
            tchatRate.Createtime = DateTime.Now;
            tchatRate.Remarks    = "聊天计费倍率设置";
            var flag   = true;
            var result = pXinDb.GetTchatRate(tchatRate.Sender, tchatRate.Receiver, tchatRate.Typeid);

            if (result.Id == 0)
            {
                if (tchatRate.Rate > 1)
                {
                    flag = pXinDb.ChatFeeRateSet(tchatRate);
                }
            }
            else
            {
                flag = pXinDb.UpdateChatFeeRate(tchatRate);
            }
            tchatRate.Rate = flag == false ? result.Rate : tchatRate.Rate;
            ChatFeeRateSetResp chatFeeRateSetResp = new ChatFeeRateSetResp(chatFeeRateSet.Header.Sequence_Id);

            chatFeeRateSetResp.Body.Status = flag == true ? (uint)1 : 0;
            chatFeeRateSetResp.Body.Rate   = tchatRate.Rate;
            client.SendData(chatFeeRateSetResp.ToBytes());
            //推送
            RateSetPush(client.Nodeid, chatFeeRateSet, tchatRate);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 向服务器发送"倍率设置"消息
 /// </summary>
 /// <param name="chatFeeRateSet"></param>
 /// <returns></returns>
 public bool SendMessageRateSet(ChatFeeRateSet chatFeeRateSet)
 {
     SendData(chatFeeRateSet.ToBytes());
     OnRaiseMsgSendEvent(chatFeeRateSet.Header.Command_Id, chatFeeRateSet, "发送消息:" + chatFeeRateSet.ToString());
     return(true);
 }
Ejemplo n.º 7
0
        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));
                }
            }
        }
Ejemplo n.º 8
0
 private void RateSet(TcpClient client, ChatFeeRateSet rateSet)
 {
     client.SendMessageRateSet(rateSet);
     //Interlocked.Decrement(ref clientCounter);
 }