Exemplo n.º 1
0
 public void ASSocketClose(ASSocketPacket _SocketPacket)
 {
     _SocketPacket._Socket.Shutdown(SocketShutdown.Both);
     _SocketPacket._Socket.Close();
     _SocketPacket._Socket = null;
     _SocketPacket         = null;
 }
Exemplo n.º 2
0
        private void TheadWaitOne()
        {
            try
            {
                if (WorkerCallBack == null)
                {
                    //Cria o evento assíncrono que será disparado quando ocorrer um imput
                    //de dados
                    WorkerCallBack = new AsyncCallback(OnDataReceived);
                }

                // Encapsula o client socket solicitante e o clientNumber.
                ASSocketPacket _SocketPacket = new ASSocketPacket();
                _SocketPacket._Socket = _ClientSocket;

                //Inicializa a recepção assíncrona dos Dados
                AsyncResult = _ClientSocket.BeginReceive(_SocketPacket.dataBuffer,
                                                         0, _SocketPacket.dataBuffer.Length,
                                                         SocketFlags.None,
                                                         WorkerCallBack,
                                                         _SocketPacket);
            }
            catch (SocketException se)
            {
                throw (se);
            }
        }
Exemplo n.º 3
0
        private void OnDataReceived(IAsyncResult asyn)
        {
            ASSocketPacket socketData = (ASSocketPacket)asyn.AsyncState;

            try
            {
                lock (this)
                {
                    int ResultBytesLength = socketData._Socket.EndReceive(asyn);

                    if (ResultBytesLength <= 0)
                    {
                        this.ASSocketClose(socketData);
                        return;
                    }

                    char[] charsLength =
                        new char[ResultBytesLength];

                    System.Text.Decoder _Decoder = System.Text.Encoding.UTF8.GetDecoder();

                    _Decoder.GetChars(
                        socketData.dataBuffer,
                        0,
                        ResultBytesLength,
                        charsLength,
                        0);


                    int BufferSize = 0;
                    int pos        = 0;

                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 24;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 16;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 8;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF);

                    byte[] dataBuffer = new byte[BufferSize];

                    int BytesReceive = socketData._Socket.Receive(dataBuffer,
                                                                  dataBuffer.Length,
                                                                  SocketFlags.None
                                                                  );

                    char[] charLenght = new char[BytesReceive];

                    string Message = string.Empty;

                    System.Text.Decoder decoder = System.Text.Encoding.UTF8.GetDecoder();

                    decoder.GetChars(
                        dataBuffer, 0, BytesReceive, charLenght, 0);

                    Message += new string(charLenght);

                    if (BytesReceive < BufferSize)
                    {
                        Message +=
                            ReceiveData(
                                BytesReceive,
                                BufferSize,
                                socketData._Socket
                                );
                    }


                    // Rebate a mensagem apenas substituindo o tipo para A3
                    Message = Message.Replace("A2", "A3");

                    // Realiza a conexão com o MDS e solicita Login.
                    MDSPackageSocket _ClientSocket = new MDSPackageSocket();
                    _ClientSocket.OpenConnection();
                    _ClientSocket.SendData(Message.ToString(), true);

                    // Apos envias a mensagem fecha a conexão.
                    this.ASSocketClose(socketData);
                }
            }
            catch (SocketException se)
            {
                if (se.ErrorCode == (int)(SocketError.ConnectionReset))
                {
                    this.ASSocketClose(socketData);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 4
0
        private void OnDataReceived(IAsyncResult asyn)
        {
            string Instrumento = string.Empty;

            ASSocketPacket socketData = (ASSocketPacket)asyn.AsyncState;

            try
            {
                lock (this)
                {
                    int ResultBytesLength = socketData._Socket.EndReceive(asyn);

                    // Falha de conexão.
                    if (ResultBytesLength <= 0)
                    {
                        logger.Warn("Encerrou conexao com MDS (" + ResultBytesLength + ") recebendo tamanho");
                        this.ASSocketClose(socketData);
                        return;
                    }

                    // Se recebeu menos que 4 bytes, recebe os bytes restantes para compor o tamanho
                    while (ResultBytesLength < 4)
                    {
                        int BytesReceived = socketData._Socket.Receive(socketData.dataBuffer,
                                                                       ResultBytesLength,
                                                                       4 - ResultBytesLength,
                                                                       SocketFlags.None);
                        if (BytesReceived <= 0)
                        {
                            logger.Warn("Encerrou conexao com MDS (" + ResultBytesLength + ") recebendo complemento do tamanho");
                            this.ASSocketClose(socketData);
                            return;
                        }

                        ResultBytesLength += BytesReceived;
                    }

                    char[] charsLength = new char[ResultBytesLength];

                    System.Text.Decoder _Decoder = System.Text.Encoding.UTF8.GetDecoder();

                    _Decoder.GetChars(
                        socketData.dataBuffer,
                        0,
                        ResultBytesLength,
                        charsLength,
                        0);

                    int BufferSize = 0;
                    int pos        = 0;

                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 24;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 16;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF) << 8;
                    BufferSize += (((int)socketData.dataBuffer[pos++]) & 0xFF);

                    int    TotalBytesReceived = 0;
                    string Message            = string.Empty;

                    while (TotalBytesReceived < BufferSize)
                    {
                        int ToReceive = BufferSize - TotalBytesReceived;

                        byte[] dataBuffer = new byte[ToReceive];

                        int BytesReceived = socketData._Socket.Receive(dataBuffer,
                                                                       ToReceive,
                                                                       SocketFlags.None
                                                                       );
                        if (BytesReceived <= 0)
                        {
                            logger.Warn("Encerrou conexao com AuthenticationServer (" + ResultBytesLength + ") recebendo dados");
                            this.ASSocketClose(socketData);
                            return;
                        }


                        char[] charLenght = new char[BytesReceived];

                        System.Text.Decoder decoder = System.Text.Encoding.UTF8.GetDecoder();

                        decoder.GetChars(dataBuffer, 0, BytesReceived, charLenght, 0);

                        Message += new string(charLenght);

                        TotalBytesReceived += BytesReceived;
                    }

                    if ((Message != null) || (Message != ""))
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(
                                                         delegate(object required)
                        {
                            this.MessageBroker(Message);
                        }));
                    }

                    ThreadWaitOne();
                }
            }
            catch (SocketException se)
            {
                logger.Error("OnDataReceived(SocketEx): " + se.Message + " ErrorCode: " + se.ErrorCode +
                             " Native: " + se.NativeErrorCode +
                             " SocketError: " + se.SocketErrorCode, se);

                logger.Warn("OnDataReceived(): Encerrando conexao com MDS");

                // Falha de conexão
                this.ASSocketClose(socketData);
            }
            catch (Exception ex)
            {
                logger.Error("OnDataReceived(): " + ex.Message, ex);
                this.ASSocketClose(socketData);
            }
        }