/// <summary> /// 接收消息 /// </summary> /// <param name="message">消息</param> public override void OnReceive(CMessage message) { base.OnReceive(message); if (DataCenter.IsFull && message.m_functionID == FUNCTIONID_SENDALL) { DataCenter.ServerChatService.SendAll(message); } if (message.m_functionID == FUNCTIONID_GETHOSTS) { List <ChatHostInfo> datas = new List <ChatHostInfo>(); int type = 0; ChatService.GetHostInfos(datas, ref type, message.m_body, message.m_bodyLength); if (type != 2) { int datasSize = datas.Count; for (int i = 0; i < datasSize; i++) { ChatHostInfo hostInfo = datas[i]; //全节点 if (hostInfo.m_type == 1) { if (hostInfo.m_ip != "127.0.0.1") { OwLibSV.ChatHostInfo serverHostInfo = new OwLibSV.ChatHostInfo(); serverHostInfo.m_ip = hostInfo.m_ip; serverHostInfo.m_serverPort = hostInfo.m_serverPort; serverHostInfo.m_type = hostInfo.m_type; DataCenter.ServerChatService.AddServerHosts(serverHostInfo); String newServer = hostInfo.m_ip + ":" + CStr.ConvertIntToStr(hostInfo.m_serverPort); List <ChatHostInfo> hostInfos = new List <ChatHostInfo>(); UserCookie cookie = new UserCookie(); if (DataCenter.UserCookieService.GetCookie("DANDANSERVERS", ref cookie) > 0) { hostInfos = JsonConvert.DeserializeObject <List <ChatHostInfo> >(cookie.m_value); } int hostInfosSize = hostInfos.Count; bool contains = false; for (int j = 0; j < hostInfosSize; j++) { ChatHostInfo oldHostInfo = hostInfos[j]; String key = oldHostInfo.ToString(); if (key == newServer) { contains = true; break; } } if (!contains) { hostInfos.Add(hostInfo); cookie.m_key = "DANDANSERVERS"; cookie.m_value = JsonConvert.SerializeObject(hostInfos); DataCenter.UserCookieService.AddCookie(cookie); } String key2 = hostInfo.ToString(); OwLib.ChatService findChatService = DataCenter.GetClientChatService(key2); if (findChatService == null) { int socketID = OwLib.BaseService.Connect(hostInfo.m_ip, hostInfo.m_serverPort); if (socketID != -1) { OwLib.ChatService clientChatService = new OwLib.ChatService(); DataCenter.AddClientChatService(key2, clientChatService); OwLib.BaseService.AddService(clientChatService); clientChatService.Connected = true; clientChatService.ToServer = type == 1; //clientChatService.RegisterListener(DataCenter.ChatRequestID, new ListenerMessageCallBack(GintechMessageCallBack)); clientChatService.SocketID = socketID; clientChatService.Enter(); } } else { OwLib.ChatService clientChatService = DataCenter.GetClientChatService(key2); if (!clientChatService.Connected) { int socketID = OwLib.BaseService.Connect(hostInfo.m_ip, hostInfo.m_serverPort); if (socketID != -1) { clientChatService.Connected = true; clientChatService.SocketID = socketID; clientChatService.Enter(); } } } } } } } } SendToListener(message); }
/// <summary> /// 调用主线程返方法 /// </summary> /// <param name="sender">调用者</param> /// <param name="args">参数</param> public void Invoke(object sender, object args) { CMessage message = args as CMessage; if (message != null) { if (message.m_serviceID == ChatService.SERVICEID_CHAT) { if (message.m_functionID == ChatService.FUNCTIONID_SENDALL) { ChatData chatData = new ChatData(); ChatService.GetChatData(chatData, message.m_body, message.m_bodyLength); CIndicator indicator = CFunctionEx.CreateIndicator2("", chatData, this); indicator.Clear(); indicator.Dispose(); } else if (message.m_functionID == ChatService.FUNCTIONID_GETHOSTS) { List <ChatHostInfo> datas = new List <ChatHostInfo>(); int type = 0; ChatService.GetHostInfos(datas, ref type, message.m_body, message.m_bodyLength); if (type != 2) { int datasSize = datas.Count; for (int i = 0; i < datasSize; i++) { ChatHostInfo hostInfo = datas[i]; List <GridRow> rows = m_gridHosts.m_rows; int rowsSize = rows.Count; bool containsRow = false; for (int j = 0; j < rowsSize; j++) { GridRow oldRow = rows[j]; if (oldRow.GetCell("colP1").GetString() == hostInfo.m_ip && oldRow.GetCell("colP2").GetInt() == hostInfo.m_serverPort) { containsRow = true; } } if (!containsRow) { if (hostInfo.m_type == 1) { String key = hostInfo.m_ip + ":" + hostInfo.m_serverPort; ChatService newServerService = DataCenter.GetClientChatService(key); if (newServerService == null) { newServerService = new ChatService(); newServerService.ServerIP = hostInfo.m_ip; newServerService.ServerPort = hostInfo.m_serverPort; newServerService.ToServer = true; BaseService.AddService(newServerService); DataCenter.AddClientChatService(key, newServerService); } } else { GridRow row = new GridRow(); m_gridHosts.AddRow(row); row.AddCell("colP1", new GridStringCell(hostInfo.m_ip)); row.AddCell("colP2", new GridIntCell(hostInfo.m_serverPort)); if (hostInfo.m_type == 1) { row.AddCell("colP3", new GridStringCell("--")); row.AddCell("colP4", new GridStringCell("--")); } else { row.AddCell("colP3", new GridStringCell(hostInfo.m_userID)); row.AddCell("colP4", new GridStringCell(hostInfo.m_userName)); } row.AddCell("colP5", new GridStringCell(hostInfo.m_type == 1 ? "服务器" : "客户端")); } } } } else { Dictionary <String, String> removeHosts = new Dictionary <String, String>(); foreach (ChatHostInfo hostInfo in datas) { removeHosts[hostInfo.ToString()] = ""; } List <GridRow> rows = m_gridHosts.m_rows; int rowsSize = rows.Count; if (rowsSize > 0) { for (int i = 0; i < rowsSize; i++) { GridRow row = rows[i]; String key = row.GetCell("colP1").GetString() + ":" + row.GetCell("colP2").GetString(); if (removeHosts.ContainsKey(key)) { m_gridHosts.RemoveRow(row); i--; rowsSize--; } } } } SetHostGridRowVisible(); } else if (message.m_functionID == ChatService.FUNCTIONID_SEND) { ChatData chatData = new ChatData(); ChatService.GetChatData(chatData, message.m_body, message.m_bodyLength); CIndicator indicator = CFunctionEx.CreateIndicator2("", chatData, this); indicator.Clear(); indicator.Dispose(); } } } String newStr = args as String; if (newStr != null) { if (newStr == "showchat") { FlashWindow(m_mainForm.Handle, true); SetForegroundWindow(m_mainForm.Handle); } else if (newStr == "shake") { m_mainForm.Play(); } else if (newStr.StartsWith("how:")) { String text = newStr.Substring(4); Barrage barrage = new Barrage(); barrage.Text = text; barrage.Mode = 1; m_barrageForm.BarrageDiv.AddBarrage(barrage); } else { TextBoxA txtReceive = GetTextBox("txtReceive"); txtReceive.Text += newStr; txtReceive.Invalidate(); if (txtReceive.VScrollBar != null && txtReceive.VScrollBar.Visible) { txtReceive.VScrollBar.ScrollToEnd(); txtReceive.Update(); txtReceive.Invalidate(); } } } }
/// <summary> /// 接收数据 /// </summary> /// <param name="message">消息</param> public virtual void OnReceive(CMessage message) { }
/// <summary> /// 区块链数据回调 /// </summary> /// <param name="message">消息</param> public void ChatMessageCallBack(CMessage message) { m_mainDiv.BeginInvoke(message); }
/// <summary> /// 股票数据回调事件 /// </summary> /// <param name="message">消息</param> private void SecurityDataCallBack(CMessage message) { OnSecurityDataCallBack(message); }
/// <summary> /// 证券数据回调方法 /// </summary> /// <param name="message">消息</param> public void OnSecurityDataCallBack(CMessage message) { m_window.BeginInvoke(message); }
/// <summary> /// 接收数据 /// </summary> /// <param name="message">消息</param> public override void OnReceive(CMessage message) { base.OnReceive(message); SendToListener(message); }
/// <summary> /// 发送POST数据 /// </summary> /// <param name="message">消息</param> /// <returns>返回消息</returns> public int SendRequest(CMessage message) { Binary bw = new Binary(); byte[] body = message.m_body; int bodyLength = message.m_bodyLength; int uncBodyLength = bodyLength; if (message.m_compressType == COMPRESSTYPE_GZIP) { using (MemoryStream cms = new MemoryStream()) { using (GZipStream gzip = new GZipStream(cms, CompressionMode.Compress)) { gzip.Write(body, 0, body.Length); } body = cms.ToArray(); bodyLength = body.Length; } } int len = sizeof(int) * 4 + bodyLength + sizeof(short) * 3 + sizeof(byte) * 2; bw.WriteInt(len); bw.WriteShort((short)message.m_groupID); bw.WriteShort((short)message.m_serviceID); bw.WriteShort((short)message.m_functionID); bw.WriteInt(message.m_sessionID); bw.WriteInt(message.m_requestID); bw.WriteByte((byte)message.m_state); bw.WriteByte((byte)message.m_compressType); bw.WriteInt(uncBodyLength); bw.WriteBytes(body); byte[] bytes = bw.GetBytes(); int length = bytes.Length; HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(m_url); webReq.Method = "POST"; webReq.ContentType = "application/x-www-form-urlencoded"; webReq.ContentLength = bytes.Length; if (bytes != null) { Stream writer = webReq.GetRequestStream(); writer.Write(bytes, 0, bytes.Length); writer.Close(); } HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); Stream reader = response.GetResponseStream(); long contentLength = response.ContentLength; byte[] dataArray = new byte[contentLength]; for (int i = 0; i < contentLength; i++) { dataArray[i] = (byte)reader.ReadByte(); } response.Close(); reader.Dispose(); bw.Close(); int ret = dataArray.Length; UpFlow += ret; IntPtr ptr = Marshal.AllocHGlobal(sizeof(byte) * ret); for (int i = 0; i < ret; i++) { IntPtr iptr = (IntPtr)((int)ptr + i); Marshal.WriteByte(iptr, dataArray[i]); } BaseService.CallBack(message.m_socketID, 0, ptr, ret); Marshal.FreeHGlobal(ptr); return(ret); }