/// <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); } } } }
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)); } } }