示例#1
0
        /*
         *
         *      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");
            }
        }
示例#2
0
        /*
         *
         *      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");
            }
        }
示例#3
0
        /*
         *
         *      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);
            }
        }