/* * * Asynchroniczna obsluga polaczenia NormalConnection * */ private void ReceiveCallback(IAsyncResult ar) { try { /* retrieve the SocketStateObject */ SocketStateObject state = (SocketStateObject)ar.AsyncState; /* read data */ int size = socketFd.EndReceive(ar); // dla bufora jednobajtowego bool end = false; if (state.m_DataBuf[0] == DataConst.endInOutBufferByte) { state.endCounter++; if (state.endCounter == DataConst.endInOutBufferSize) { end = true; } } else { state.endCounter = 0; } if (state.start) { if (state.m_DataBuf[0] != 0) { state.start = false; setThreadedColor(); //MessageBox.Show(colorCount.ToString()); } } if (!state.start) { setThreadedColor(); state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE); if (state.m_DataBuf[0] == DataConst.endInOutBufferByte) { state.endCounter++; if (state.endCounter == DataConst.endInOutBufferSize) { end = true; } } else { state.endCounter = 0; } } if (!end) { /* get the rest of the data */ socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallback), state); } else { stopWatch.Stop(); /* all the data has arrived */ // koniec transmisji danych odbiorczych byte[] bytes = state.m_MemoryStream.ToArray(); if (DataConst.DEBUG) { MessageBox.Show(Conversions.BytesToStringHex(bytes)); } if (bytes.Length > 0) { setThreadedConnectionTime((int)stopWatch.ElapsedMilliseconds); fromServerBuffer = new FromServerBuffer(bytes); switch (fromServerBuffer.orderCode) { case OrderCode.eMaxPing: { if (fromServerBuffer.orderResponse == 0) { setThreadedStatusLabel("Aktualizowano maksymalny ping do " + toServerBuffer.maxPing + " ms"); } else { setThreadedStatusLabel("Błąd podczas ustawienia maksymalnego pingu " + toServerBuffer.maxPing); } } break; // //TODO obsluga startu watku odbierania danych case OrderCode.eLogin: { if (fromServerBuffer.orderResponse == 0) { setThreadedStatusLabel("Logowanie zakończone po " + stopWatch.ElapsedMilliseconds.ToString() + " ms"); if (this.InvokeRequired) { this.Invoke((MethodInvoker) delegate { this.timerDelayInfo.Enabled = true; }); } } else { setThreadedStatusLabel("Błąd podczas logowania"); } } break; // zakonczono testy case OrderCode.eLogout: { //CloseREP(); if (fromServerBuffer.orderResponse == 0) { if (this.InvokeRequired) { this.Invoke((MethodInvoker) delegate { CloseREP(); this.Close(); }); } } else { setThreadedStatusLabel("Błąd podczas wylogowania"); } } break; case OrderCode.eAddServer: { if (fromServerBuffer.orderResponse == 0) { setThreadedStatusLabel("Dodano serwer " + oPDomain + " o porcie " + oPPort); } else { setThreadedStatusLabel("Błąd podczas dodania serwera " + oPDomain + " o porcie " + oPPort); } } break; case OrderCode.eDeleteServer: { if (fromServerBuffer.orderResponse == 0) { setThreadedStatusLabel("Usunięto serwer " + oPDomain + " o porcie " + oPPort); setThreadedClearDataRecords(); } else { setThreadedStatusLabel("Błąd podczas usuwania serwera " + oPDomain + " o porcie " + oPPort); } } break; case OrderCode.eDeleteAllServers: { if (fromServerBuffer.orderResponse == 0) { setThreadedStatusLabel("Usunięto wszystkie serwery"); setThreadedClearDataRecords(); } else { setThreadedStatusLabel("Błąd podczas usuwania wszystkich serwerow"); } } break; default: { setThreadedStatusLabel("Niepoprawna odpowiedź serwera"); } break; } /* shutdown and close socket */ try { socketFd.Shutdown(SocketShutdown.Both); socketFd.Close(); } catch { } } } } catch (Exception exc) { //MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString()); setThreadedStatusLabel("Błąd odczytu danych z serwera"); } }
/* * * Asynchroniczna obsluga polaczenia REPConnection * */ private void ReceiveCallbackREP(IAsyncResult ar) { try { /* retrieve the SocketStateObject */ SocketStateObject state = (SocketStateObject)ar.AsyncState; //Socket socketFd = state.m_SocketFd; /* read data */ int size = socketFdREP.EndReceive(ar); // dla bufora jednobajtowego bool end = false; if (state.start) { if (state.m_DataBuf[0] != 0) { state.start = false; setThreadedColor(); //MessageBox.Show(colorCount.ToString()); } } if (!state.start) { setThreadedColor(); state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE); if (state.m_DataBuf[0] == DataConst.endInOutBufferByte) { state.endCounter++; if (state.endCounter == DataConst.endInOutBufferSize) { end = true; } } else { state.endCounter = 0; } } if (!end) { /* get the rest of the data */ socketFdREP.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallbackREP), state); } else { stopWatchREP.Stop(); byte[] bytes = state.m_MemoryStream.ToArray(); if (DataConst.DEBUG) { } // MessageBox.Show(Conversions.BytesToStringHex(bytes)); /* all the data has arrived */ // koniec transmisji danych odbiorczych if (bytes.Length > 0) { //MessageBox.Show(Conversions.BytesToStringHex( Conversions.CharArrayToBytes(state.m_StringBuilder.ToString().ToCharArray()))); fromServerBufferREP = new FromServerBuffer(bytes); //MessageBox.Show(Conversions.BytesToStringHex(fromServerBufferREP.bytes)); //MessageBox.Show(fromServerBufferREP.serverInfo.ToString()); if (fromServerBufferREP.orderCode == OrderCode.eServerData) { setThreadedTime(); setThreadedInsertRow(fromServerBufferREP.serverInfo); } else { setThreadedStatusLabel("Niepoprawna odpowiedź serwera"); } // nalezy dodac zapetlenie state.m_MemoryStream = new MemoryStream(); state.endCounter = 0; state.start = true; socketFdREP.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallbackREP), state); } } } catch (Exception exc) { if (DataConst.DEBUG) { MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString()); } setThreadedStatusLabel("Błąd odczytu danych połaczeń z serwera"); } }
/* * * Asynchroniczna obsluga polaczenia * */ private void ReceiveCallback(IAsyncResult ar) { try { /* retrieve the SocketStateObject */ SocketStateObject state = (SocketStateObject)ar.AsyncState; //Socket socketFd = state.m_SocketFd; /* read data */ int size = socketFd.EndReceive(ar); // dla bufora jednobajtowego bool end = false; state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE); if (state.m_DataBuf[0] == DataConst.endInOutBufferByte) { state.endCounter++; if (state.endCounter == DataConst.endInOutBufferSize) { end = true; } } else { state.endCounter = 0; } if (!end) { //state.m_MemoeyStream.Append(Encoding.u .GetString(state.m_DataBuf, 0, size)); /* get the rest of the data */ socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallback), state); } else { stopWatch.Stop(); byte[] bytes = state.m_MemoryStream.ToArray(); if (DataConst.DEBUG) { MessageBox.Show(Conversions.BytesToStringHex(bytes)); } /* all the data has arrived */ // koniec transmisji danych odbiorczych if (bytes.Length > 0) { fromServerBuffer = new FromServerBuffer(bytes); if (fromServerBuffer.orderCode == OrderCode.eConnection) { setThreadedConnectButton(true); setThreadedStatusLabel("Test zakończony pomyślnie po " + stopWatch.ElapsedMilliseconds.ToString() + " ms"); } else { setThreadedConnectButton(true); setThreadedStatusLabel("Niepoprawna odpowiedź serwera"); } //MessageBox.Show(Conversions.BytesToStringHex(fromServerBuffer.bytes)); /* shutdown and close socket */ socketFd.Shutdown(SocketShutdown.Both); socketFd.Close(); } } } catch (Exception exc) { if (DataConst.DEBUG) { MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString()); } setThreadedStatusLabel("Błąd odczytu danych z serwera"); setThreadedConnectButton(false); } }