internal bool Receive(byte[] buffer, int offset, int count) { ReceiveBuffer.WriteBytes(buffer, offset, count); // 写入数据内容 bool result = true; while (ReceiveBuffer.DataCount > sizeof(int)) { //按照长度分包 int packetLength = BitConverter.ToInt32(ReceiveBuffer.Buffer, 0); //获取包长度 // 老版代码 if ((packetLength > 10 * 1024 * 1024) | (buffer.Length > 10 * 1024 * 1024)) //最大Buffer异常保护 { App.Logger.Error("内存超出, 数据不进行操作, 关闭远程连接"); return(false); } if ((ReceiveBuffer.DataCount - sizeof(int)) >= packetLength) //收到的数据达到包长度 { result = PacketProcess.Process(this, ReceiveBuffer.Buffer, sizeof(int), packetLength); if (result) { ReceiveBuffer.Clear(packetLength + sizeof(int)); } else { return(result); } } else { return(true); } } return(true); }
private void OnConnet(object sender, AsyncSocketConnectionEventArgs e) { K_TO_M_CHANNEL_IDX p = new K_TO_M_CHANNEL_IDX(); p.num = (byte)PACKET_IDX.KM_CHANNEL_IDX; p.len = (Int16)Marshal.SizeOf(p); p.nIdx = crawleridx_; byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); ((AsyncSocketClient)sender).Send(sendbuffer); }
private void OnReceive(object sender, AsyncSocketReceiveEventArgs e) { AsyncSocketClient psocket = (AsyncSocketClient)sender; //AppManager.Instance.AddLog(Convert.ToString(e.ReceiveBytes)); Int16 len = System.BitConverter.ToInt16(e.ReceiveData, 0); if (len != e.ReceiveBytes) { AppManager.Instance.AddLog("패킷의 길이가 달라요"); return; } PACKET_IDX pidx = (PACKET_IDX)System.BitConverter.ToChar(e.ReceiveData, 2); switch (pidx) { case PACKET_IDX.CM_CHANNEL_IDX: { C_TO_M_CHANNEL_IDX p = new C_TO_M_CHANNEL_IDX(); PacketProcess.Deserialize(p, e.ReceiveData); if (Crawler_Connection_List_.ContainsKey(p.nIdx) == false) { Crawler_Connection_List_.Add(p.nIdx, psocket); } ChannelInfo_List_[p.nIdx].connected_ip_ = psocket.Connection.RemoteEndPoint.ToString(); ChannelInfo_List_[p.nIdx].crawler_status_ = "연결됨"; } break; case PACKET_IDX.KM_CHANNEL_IDX: { K_TO_M_CHANNEL_IDX p = new K_TO_M_CHANNEL_IDX(); PacketProcess.Deserialize(p, e.ReceiveData); if (Checker_Connection_List_.ContainsKey(p.nIdx) == false) { Checker_Connection_List_.Add(p.nIdx, psocket); } ChannelInfo_List_[p.nIdx].checker_status_ = "연결됨"; } break; default: { AppManager.Instance.AddLog("잘못된 패킷이 도착했습니다."); } break; } }
private void OnConnet(object sender, AsyncSocketConnectionEventArgs e) { NewLogManager2.Instance.Log("연결 되었습니다."); C_TO_M_CHANNEL_IDX p = new C_TO_M_CHANNEL_IDX(); p.num = (byte)PACKET_IDX.CM_CHANNEL_IDX; p.len = (Int16)Marshal.SizeOf(p); p.nIdx = CINIManager.Instance.channelseq_; byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); ((AsyncSocketClient)sender).Send(sendbuffer); }
private void OnReceive(object sender, AsyncSocketReceiveEventArgs e) { try { LogManager.Instance.Log(string.Format("private void OnReceive {0}/{1}", sender.ToString(), e.ToString())); AsyncSocketClient psocket = (AsyncSocketClient)sender; Int16 len = System.BitConverter.ToInt16(e.ReceiveData, 0); if (len != e.ReceiveBytes) { return; } PACKET_IDX pidx = (PACKET_IDX)System.BitConverter.ToChar(e.ReceiveData, 2); switch (pidx) { case PACKET_IDX.MK_RESTART: { } break; case PACKET_IDX.CK_HEARTBEAT: { C_TO_K_HEARTBEAT p = new C_TO_K_HEARTBEAT(); PacketProcess.Deserialize(p, e.ReceiveData); if (p.CrawlingCount > CrawlingCount_) { CrawlingCountChangeTime_ = Environment.TickCount; LogManager.Instance.Log(string.Format("크롤링이 끝났다고 날라 왔구나. 고고싱~{0}", p.CrawlingCount)); CrawlingCount_ = p.CrawlingCount; } HeartBeatTime_ = Environment.TickCount; label_NextCheck.Text = string.Format("PACKET_IDX.CK_HEARTBEAT 패킷 도착{0}", HeartBeatTime_); } break; default: { } break; } } catch (System.Exception ex) { LogManager.Instance.Log(string.Format("private void Error OnReceive {0}", ex.Message)); } }
private void OnConnet(object sender, AsyncSocketConnectionEventArgs e) { LogManager.Instance.Log("private void OnConnet(object sender, AsyncSocketConnectionEventArgs e)"); LQCrawlerInfo pInfo = CrawlerManager.Instance.GetCrawlerInfo(); C_TO_M_CHANNEL_IDX p = new C_TO_M_CHANNEL_IDX(); p.num = (byte)PACKET_IDX.CM_CHANNEL_IDX; p.len = (Int16)Marshal.SizeOf(p); //p.nIdx = CrawlerInfoManager.Instance.channelidx_; p.nIdx = pInfo.nIdx_; byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); ((AsyncSocketClient)sender).Send(sendbuffer); }
public AsyncSocket(int numConnections) { NumConnections = numConnections; ReceiveBufferSize = 1024 * 10; // IOCP接收数据缓存大小,设置过小会造成事件响应增多,设置过大会造成内存占用偏多 AsyncSocketUserTokenPool = new ZObjectPool <AsyncSocketUserToken>(numConnections); AsyncSocketUserTokenList = new ZObjectList <AsyncSocketUserToken>(); MaxNumberAccepted = new Semaphore(numConnections, numConnections); AsyncSocketUserToken userToken; PacketProcess oPacketProcess = new PacketProcess(); for (int i = 0; i < NumConnections; i++) //按照连接数建立读写对象 { userToken = new AsyncSocketUserToken(ReceiveBufferSize); userToken.AsyncSocket = this; userToken.PacketProcess = oPacketProcess; userToken.ReceiveEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); userToken.SendEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); AsyncSocketUserTokenPool.Push(userToken); } }
// 체커로의 연결을 확인 void CheckChecker() { //LogManager.Instance.Log("체커 연결 확인"); bool bNeedConnection = false; if (checker_socket_ == null) { bNeedConnection = true; } else { if (checker_socket_.Connection == null) { bNeedConnection = true; } else { if (checker_socket_.Connection.Connected == false) { bNeedConnection = true; } else { LQCrawlerInfo pInfo = CrawlerManager.Instance.GetCrawlerInfo(); C_TO_K_HEARTBEAT p = new C_TO_K_HEARTBEAT(); p.num = (byte)PACKET_IDX.CK_HEARTBEAT; p.len = (Int16)Marshal.SizeOf(p); p.CrawlingCount = CrawlerManager.Instance.CrawlingCount(); byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); checker_socket_.Send(sendbuffer); } } } if (bNeedConnection == true) { CheckerConnect(); } }
// 매니저의 연결을 확인 void CheckManager() { bool bNeedConnection = false; if (manager_socket_ == null) { bNeedConnection = true; } else { if (manager_socket_.Connection == null) { bNeedConnection = true; } else { if (manager_socket_.Connection.Connected == false) { bNeedConnection = true; } else { LQCrawlerInfo pInfo = CrawlerManager.Instance.GetCrawlerInfo(); C_TO_M_CHANNEL_IDX p = new C_TO_M_CHANNEL_IDX(); p.num = (byte)PACKET_IDX.CM_CHANNEL_IDX; p.len = (Int16)Marshal.SizeOf(p); p.nIdx = pInfo.nIdx_; byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); manager_socket_.Send(sendbuffer); } } } if (bNeedConnection == true) { ManagerConnect(); } }
void Connection_Function(object sender, DoWorkEventArgs e) { bool bNeedConnection = false; if (manager_socket_ == null) { bNeedConnection = true; } else { if (manager_socket_.Connection == null) { bNeedConnection = true; } else { if (manager_socket_.Connection.Connected == false) { bNeedConnection = true; } else { K_TO_M_CHANNEL_IDX p = new K_TO_M_CHANNEL_IDX(); p.num = (byte)PACKET_IDX.KM_CHANNEL_IDX; p.len = (Int16)Marshal.SizeOf(p); p.nIdx = crawleridx_; //p.nChannelIdx = InfoManager.Instance.channelidx_; byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); ((AsyncSocketClient)sender).Send(sendbuffer); } } } if (bNeedConnection == true) { ServerConnect(); } }
public void ProcessTest() { for (int i = 1; i <= 22; i++) { string s1 = @".\tests\" + String.Format("{0:00}", i); string s2 = @".\tests\" + String.Format("{0:00}", i) + ".a"; string t1 = System.IO.File.ReadAllText(s1); string t2 = System.IO.File.ReadAllText(s2); string Delimiter = "\r\n"; var t1SplitRN = t1.Split(new[] { Delimiter }, StringSplitOptions.None); var inputFirstLine = t1SplitRN[0].Split(' '); int bufferSize = Int32.Parse(inputFirstLine[0]); int packNumber = Int32.Parse(inputFirstLine[1]); List <Pack> inputList = new List <Pack>(); for (int j = 1; j <= packNumber; j++) { var packInput = t1SplitRN[j].Split(' '); Pack thepack = new Pack(Int32.Parse(packInput[0]), Int32.Parse(packInput[1]), j - 1); inputList.Add(thepack); } string expected = t2; using (var consoleOutput = new ConsoleOutput()) { PacketProcess.Process(bufferSize, inputList); string error = "Case" + String.Format("{0:00}", i); Assert.AreEqual(expected, consoleOutput.GetOuput(), error); } } }
private void dataGridView_Crawler_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 8) { string str = dataGridView_Crawler.Rows[e.RowIndex].Cells[0].Value as string; Int32 nChIdx = Convert.ToInt32(str); if (AppManager.Instance.Checker_Connection_List_.ContainsKey(nChIdx) == true) { AsyncSocketClient psocket = AppManager.Instance.Checker_Connection_List_[nChIdx]; M_TO_K_RESTART p = new M_TO_K_RESTART(); p.num = (byte)PACKET_IDX.MK_RESTART; p.len = (Int16)Marshal.SizeOf(p); byte[] sendbuffer = new byte[p.len]; PacketProcess.Serialize(p, sendbuffer); psocket.Send(sendbuffer); } else { MessageBox.Show("체커와 연결이되지 않았습니다. 체커를 실행 시켜 주세요."); } } }
public void Reset() { this._isProcess = PacketProcess.PACKETPROCESS_NULL; }
private void Update() { PacketProcess.Process(m_packetQueue, Instance); }
public PacketProcessInfo(WorldPacket packet) { this._packet = packet; this._isProcess = PacketProcess.PACKETPROCESS_NULL; }
public void Send() { this._isProcess = PacketProcess.PACKETPROCESS_SEND; }
public void Process() { this._isProcess = PacketProcess.PACKETPROCESS_PROCESS; }
public void registerDelegate(PacketType type, PacketProcess func) { if (delegateFunctions.ContainsKey(type)) { delegateFunctions[type] = func; } else { delegateFunctions.Add(type, func); } }