/// <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()); } }
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); }
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("完成"); }
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); } } }
/// <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); }
/// <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); }
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)); } } }
private void RateSet(TcpClient client, ChatFeeRateSet rateSet) { client.SendMessageRateSet(rateSet); //Interlocked.Decrement(ref clientCounter); }