segunda-feira, 7 de março de 2016

JavaScript Hardware Communication



using System;
using System.IO;
using System.Net;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;

namespace  WebScanning.Host
{
  public class ServidorWeb
  {

    #region Propriedades
    public WebServiceScanner twainScanningService { get; set; }

    public WebServiceHost ServiceHost
    {
      get;
      private set;
    }
    public bool IsStarted
    {
      get;
      private set;
    }
    #endregion

    #region Methodos

    #region GetURI
    private Uri GetUri(bool secure = false)
    {
      string text = string.Empty;
      Uri result;
      try
      {
        string port = ":8080";
        text = string.Format("{0}://{1}"+port+"{2}/{3}", new object[]
             {
                    secure ? "https" : "http",
                    Dns.GetHostEntry("").HostName,
                    string.IsNullOrEmpty("") ? string.Empty : ":",
                    "WebScan"
             });
        result = new Uri(text);
      }
      catch (UriFormatException e)
      {
        throw new UriFormatException(string.Format("{0} is not a valid uri.  Check the config file.", text), e);
      }
      return result;
    }
    #endregion

    #region Start
    public string Start(IntPtr owner)
    {
      string ret = String.Empty;
      if (this.IsStarted)
      {
        this.Stop();
      }

      Uri uri = this.GetUri(false);
      Uri[] baseAddresses = new Uri[]
              {
                    uri
             };

      twainScanningService = new WebServiceScanner();
      ServiceHost = new WebServiceHost(twainScanningService, baseAddresses);
      WebHttpBinding webHttpBinding = new WebHttpBinding();
      ServiceEndpoint endpoint = ServiceHost.AddServiceEndpoint(typeof(IServicoScanner), webHttpBinding, uri);
      List<OperationDescription> corsEnabledOperations = endpoint.Contract.Operations
         .Where(o => o.Behaviors.Find<CorsEnabledAttribute>() != null)
         .ToList();
      CorsEnabledServiceHost.AddPreflightOperations(endpoint, corsEnabledOperations);
      endpoint.Behaviors.Add(new WebHttpBehavior());
      endpoint.Behaviors.Add(new EnableCorsEndpointBehavior());

      try
      {
        ServiceHost.Open();
       
        this.IsStarted = true;
      
      }
      catch (Exception ex)
      {
        ret = CN.Logger.Gravar("falha iniciar servidor: " + ex.Message);
        ServiceHost.Abort();
        Stop();
      }
      return ret;
    }
    #endregion

    #region Stop
    public void Stop()
    {
      if (!this.IsStarted)
      {
        return;
      }
      if (this.ServiceHost != null)
      {
        this.twainScanningService = null;
      }

      if (ServiceHost != null)
      {
        this.ServiceHost.Close();
        this.ServiceHost = null;
      }

      this.IsStarted = false;

    }
    #endregion

    #endregion

  }
}



////////////////////


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Web;
using WSFILE;
using WebScanning.Host.Negocio;

namespaceWebScanning.Host
{
  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
  public class WebServiceScanner : IServicoScanner
  {
    #region Delegates and Events
    public delegate void ChangedEventHandler(object sender, EventArgs e);
    public event ChangedEventHandler onNovoDocumento;
    public event ChangedEventHandler onValidaDocumento;
    public event ChangedEventHandler onAbrirDocumento;
    public event ChangedEventHandler onLogin;
    public event ChangedEventHandler onLogout;
    #endregion

    #region Atributos
             WS.WS ws = new WS.WS();
    String LastSession = String.Empty;
    #endregion

    #region Métodos


    #region ValidarDocumentoUsuario
    public void ValidarDocumentoUsuario(Boolean Valida)
    {
      Program.TransacaoAtual.Valida = Valida;
      if (onValidaDocumento != null)
      {
        EventArgs e = new EventArgs();
        Program.TransacaoAtual.Pool = string.Empty;
        onValidaDocumento(this, e);
      }
    }
    #endregion

    #region Pool
    public String Pool()
    {
      String LastPool = Program.TransacaoAtual.Pool;
      Program.TransacaoAtual.Pool = string.Empty;
      return "{ \"ret\":\"1\", \"Pool\":\"" + LastPool + "\", \"TransacaoId\":\"" + Program.TransacaoAtual.TransacaoId + "\", \"Documento\":\"" + Program.TransacaoAtual.Documento.CodigoArquivo + "\"}";
    }
    #endregion


    #region Info
    public String Info()
    {
      return "{ \"ret\":\"1\", \"CodigoArquivo\":\"" + Program.TransacaoAtual.Documento.CodigoArquivo + "\", \"Sessao\":\"" + Program.TransacaoAtual.Sessao.SessaoID + "\", \"IpAddress\":\"" + WebScanning.Host.Negocio.Util.GetLocalIPAddress() + "\", \"cmd\":\"" + Program.TransacaoAtual.Status + "\", \"msg\":\"" + Program.TransacaoAtual.MensagemStatus + "\", \"ultimaTransacaoID\":\"" + Program.TransacaoAtual.TransacaoId + "\", \"Expira\":\"" + Program.TransacaoAtual.Sessao.DataExpiracao.ToString("dd/MM/yyyy HH:mm:ss") + "\"}";

    }
    #endregion

    #region Login
    private void Login()
    {
      if (onLogin != null)
      {
        EventArgs e = new EventArgs();
        onLogin(this, e);
      }
    }
    #endregion

    #region Logout
    private void Logout()
    {
      if (onLogout != null)
      {
        EventArgs e = new EventArgs();
        onLogout(this, e);
      }

    }
    #endregion

    #region ValidaSessao
    private bool ValidaSessao(String Sessao)
    {

      if (Sessao == null && Sessao == string.Empty)
        return false;

      if (Program.TransacaoAtual.Sessao.SessaoID == null ||
        Sessao.ToLower() != Program.TransacaoAtual.Sessao.SessaoID.ToLower())
      {
                           WS.Sessao sessao = new WS.Sessao();
        try
        {
          sessao = ws.BuscarSessao(Sessao);
        }
        catch (System.Exception  ex){
          Logout();
          return false;
       
        }

        Program.TransacaoAtual.Sessao = sessao;

        Login();
      }

      return true;
    }
    #endregion

    #region Init
    public String Init(String Sessao)
    {
      if (!ValidaSessao(Sessao))
        return "{ \"ret\":\"0\",\"msg\":\"SessaoInvalida\"}";
      else
        return "{ \"ret\":\"1\", \"SessaoID\":\""+ Program.TransacaoAtual.Sessao.SessaoID +"\",\"DataExpiracao\":\"" + Program.TransacaoAtual.Sessao.DataExpiracao + "\"}";
    }
    #endregion

    #region NovoDocumento
    public string NovoDocumento(String Sessao,
                                String CampoCustom1, String CampoCustom2,
                                String CampoCustom3, String CampoCustom4,
                                String Extensao,
                                String Identificador)
    {
     
      if(!ValidaSessao(Sessao))
        return "{ \"ret\":\"0\",\"msg\":\"SessaoInvalida\"}";

      try
      {
        if (Program.TransacaoAtual.Sessao.SessaoID != null &&
          Program.TransacaoAtual.Sessao.SessaoID.ToLower() == Sessao.ToLower())
        {

                                  WS.Sessao SessaoBkp = Program.TransacaoAtual.Sessao;
          Program.TransacaoAtual = new Transacao("NovoDocumento");
          Program.TransacaoAtual.Sessao = SessaoBkp;
        }
        else
          Program.TransacaoAtual = new Transacao("NovoDocumento");


        Program.TransacaoAtual.Documento.CampoCustom1 = CampoCustom1;
        Program.TransacaoAtual.Documento.CampoCustom2 = CampoCustom2;
        Program.TransacaoAtual.Documento.CampoCustom3 = CampoCustom3;
        Program.TransacaoAtual.Documento.CampoCustom4 = CampoCustom4;
        Program.TransacaoAtual.Documento.Extensao = Extensao;
        Program.TransacaoAtual.Documento.Paginas = 1; 
        Program.TransacaoAtual.Documento.Identificador = Identificador;
        //Aciona Evento para Mostrar Tela
        if (onNovoDocumento != null)
        {
          EventArgs e = new EventArgs();
          onNovoDocumento(this, e);
        }

        return "{ \"ret\":\"1\",\"cmd\":\"NovoDocumento\", \"msg\":\"OK\", \"transacaoID\":\"" + Program.TransacaoAtual.TransacaoId + "\", \"DataTransacao\":\"" + Program.TransacaoAtual.DataCriacao.ToString("dd/MM/yyyy HH:mm:ss") + "\"}";
      }
      catch (System.Exception ex)
      {
        return "{ \"ret\":\"0\",\"msg\":\"" + ex.Message+ "\"}";
     
      }
    }
    #endregion


    #region AbrirDocumento
    public string AbrirDocumento(String Sessao,
                                 String CodigoArquivo,
                                 String Modo)
    {
      if (!ValidaSessao(Sessao))
        return "{ \"ret\":\"0\",\"msg\":\"SessaoInvalida\"}";

      try
      {
        if (Program.TransacaoAtual.Sessao.SessaoID != null &&
          Program.TransacaoAtual.Sessao.SessaoID.ToLower() == Sessao.ToLower())
        {
                                  WS.Sessao SessaoBkp = Program.TransacaoAtual.Sessao;
          Program.TransacaoAtual = new Transacao("AbrirDocumento");
          Program.TransacaoAtual.Sessao = SessaoBkp;
        }
        else
          Program.TransacaoAtual = new Transacao("AbrirDocumento");



        Program.TransacaoAtual.Documento = ws.BuscarDocumento(Sessao, CodigoArquivo);
        Program.TransacaoAtual.UploadFileAsBase64String = ws.DownloadDocumento(Sessao, CodigoArquivo);

        //Modo 1 (visualizacao), 2 edicao
        if (onAbrirDocumento != null)
        {
          EventArgs e = new EventArgs();
          onAbrirDocumento(this, e);
        }
        //Aciona Evento para Mostrar Tela
        return "{ \"ret\":\"1\",\"cmd\":\"AbrirDocumento\", \"msg\":\"OK\", \"transacaoID\":\"" + Program.TransacaoAtual.TransacaoId + "\"}";
      }
      catch (System.Exception ex){
        return "{ \"ret\":\"0\",\"msg\":\""+ex.Message+"\"}";
      }
    }
    #endregion

    #region RecuperarImagem
    public string RecuperarImagem( String Sessao,
                                   String CodigoArquivo)
    {
      if (!ValidaSessao(Sessao))
        return "{ \"ret\":\"0\",\"msg\":\"SessaoInvalida\"}";

      try
      {
        //setDesativarAposEnviar
        if (CodigoArquivo != null && CodigoArquivo != string.Empty)
        {
          if (Program.TransacaoAtual.Sessao.SessaoID != null &&
            Program.TransacaoAtual.Sessao.SessaoID.ToLower() == Sessao.ToLower())
          {

                                        WS.Sessao SessaoBkp = Program.TransacaoAtual.Sessao;
            Program.TransacaoAtual = new Transacao("RecuperarImagem");
            Program.TransacaoAtual.Sessao = SessaoBkp;
          }
          else
            Program.TransacaoAtual = new Transacao("RecuperarImagem");



          Program.TransacaoAtual.Documento = ws.BuscarDocumento(Sessao, CodigoArquivo);
          Program.TransacaoAtual.UploadFileAsBase64String = ws.DownloadDocumento(Sessao, CodigoArquivo);
          //Modo 1 (visualizacao), 2 edicao
        }

        if (Program.TransacaoAtual.UploadFileAsBase64String == null || Program.TransacaoAtual.UploadFileAsBase64String == string.Empty)
          return string.Empty;
        else
          return "data:image/png;base64," + Program.TransacaoAtual.UploadFileAsBase64String;
      }
      catch (System.Exception ex)
      {
        return "{ \"ret\":\"0\",\"msg\":\"" + ex.Message +"\"}";
      }
    }
    #endregion



    #endregion
  }
}

///////////////////////////////////

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Web;


namespace WebScanning.Host
{
  [ServiceContract]
  public interface IServicoScanner
  {




    [OperationContract(Name = "ValidarDocumentoUsuario", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ValidarDocumentoUsuario"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    void ValidarDocumentoUsuario(Boolean Valida);

    [OperationContract(Name = "Pool", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "Pool"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string Pool();


    [OperationContract(Name = "Info", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "Info"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string Info();


    [OperationContract(Name = "NovoDocumento", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "NovoDocumento"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string NovoDocumento(String Sessao,
                                String CampoCustom1, String CampoCustom2,
                                String CampoCustom3, String CampoCustom4,
                                String Extensao,
                                String Identificador);

    [OperationContract(Name = "AbrirDocumento", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AbrirDocumento"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string AbrirDocumento(String Sessao, String CodigoArquivo, String Modo);

   
    [OperationContract(Name = "RecuperarImagem", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "RecuperarImagem"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string RecuperarImagem(String Sessao,
                                 String CodigoArquivo);


    [OperationContract(Name = "Init", IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "Init"),
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), CorsEnabled]
    string Init(String Sessao);

  }
}

////////////////


  var currentTransacaoId = '';
  var MAX = 3;
  var tempoPool = 1000;

  var initOK = false;
  var STOP = false;
  var tentativas = 0;



  function callPoll() {
    setTimeout(function () { poll() }, tempoPool)
  }

  function poll() {
    var url = getURL() + '/Pool';
    if (!STOP) {
      $.ajax({
        'type': "POST",
        contentType: "application/json",
        url: url,
        async: false,
        crossDomain: true,
        timeout: 2000,
        success: function (result) {
          if (result != null && result != '') {
            tentativas = 0;
            var obj = jQuery.parseJSON(result);
            if (obj.Pool == 'Enviado'
                                    && obj.TransacaoId == currentTransacaoId) {

              //Notifica o usuárioq ue o arquivo foi enviado
              DocumentoEnviado(obj.Documento);


            }
            else if (obj.Pool == "ValidarDocumentoUsuario"
                                         && obj.TransacaoId == currentTransacaoId) {

              //Chama o código do programador para realizar a validação

              var ret = ValidarDocumentoUsuario();
              RespostaValidaDocumento(ret);

            }
          }
        },
        complete: callPoll,
        error: function (jqXHR, textStatus, errorThrown) {
          tentativas++;
          checkTentativa();
        }
      });
    }
  };


  function getURL() {
    return 'http://localhost:8080/WebScan';
  }

 
  function RespostaValidaDocumento(Valida) {
    var Sessao = getSessao();
    var data = {
      Sessao: Sessao,
      Valida: Valida
    };
    var url = getURL() + '/ValidarDocumentoUsuario';
    var response = '';
    if (!STOP) {
      $.ajax({
        'type': "POST",
        contentType: "application/json",
        data: JSON.stringify(data),
        url: url,
        async: false,
        crossDomain: true,
        success: function (result) {
          var obj = jQuery.parseJSON(result);
        },
        error: function (jqXHR, textStatus, errorThrown) {
        }
      })
    };
  }

  function Init() {
  var Sessao = getSessao();
    var data = {
      Sessao: Sessao
    };
    var url = getURL() + '/Init';
    var response = '';
    if (!STOP && !initOK) {
      tentativas++;
      $.ajax({
        'type': "POST",
        contentType: "application/json",
        data: JSON.stringify(data),
        url: url,
        async: false,
        crossDomain: true,
        success: function (result) {
          var obj = jQuery.parseJSON(result);

          if (obj != null && obj.ret == 1) {
            initOK = true;
            Inicializado(true);
          }
          else {
            tentativas++;
            checkTentativa();
          }

        },
        complete: Init,
        error: function (jqXHR, textStatus, errorThrown) {

          tentativas++;
          checkTentativa();

        }
      })
    };
  }



 function NovoDocumento(CampoCustom1, CampoCustom2, CampoCustom3, CampoCustom4, Extensao, Identificador) {
    var Sessao = getSessao();
    var data = {
      Sessao: Sessao,
      CampoCustom1: CampoCustom1,
      CampoCustom2: CampoCustom2,
      CampoCustom3: CampoCustom3,
      CampoCustom4: CampoCustom4,
      Extensao: Extensao,
      Identificador: Identificador
    };

    var url = getURL() + '/NovoDocumento'
    var response = '';
    $.ajax({
      'type': "POST",
      contentType: "application/json",
      data: JSON.stringify(data),
      url: url,
      async: false,
      crossDomain: true,
      success: function (result) {
        var obj = jQuery.parseJSON(result);
        if (obj!=null && obj.ret == 1) {
          currentTransacaoId = obj.transacaoID;
        }
        else
          debug("NovoDocumento:Error  ");

      },
      error: function (jqXHR, textStatus, errorThrown) {
        debug("NovoDocumento:Error  " + textStatus);
      }
    });
  }


function AbrirDocumento(CodigoArquivo) {
  var Sessao = getSessao();
  var Modo = '1'; //1 - leitura , 2 edicação
  var data = {
    Sessao: Sessao,
    CodigoArquivo: CodigoArquivo,
    Modo: Modo
  };

  var url = getURL() + '/AbrirDocumento';
  var response = '';
  $.ajax({

    'type': "POST",
    contentType: "application/json",
    data: JSON.stringify(data),
    url: url,
    async: false,
    crossDomain: true,
    success: function (result) {
      var obj = jQuery.parseJSON(result);
      if (obj != null && obj.ret == 1) {
        currentTransacaoId = obj.transacaoID;
        debug("AbrirDocumento:OK  ");

      }
      else
        debug("AbrirDocumento:Error  ");


    },
    error: function (jqXHR, textStatus, errorThrown) {
      $("#result").text(textStatus);
    }
  });
}

  function checkTentativa() {
    debug("Inicializando " + (tentativas) + "...");
    if (parseInt(tentativas) >= parseInt(MAX)) {
      STOP = true;
      Inicializado(false, "Falha, tente novamente... ");
    }

  }

  debug = function (log_txt) {
    if (typeof window.console != 'undefined') {
      console.log(log_txt);
    }
  }

 

Init();
poll();



 



Postar um comentário