aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.UnitTesting/CodeGeneration_TST.cs
blob: 373d88722972c9cbf7c3244d77b37093b34f29ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tango.DAL.Remote.DB;
using Tango.Integration.Observables;
using Tango.Settings;
using System.Linq;
using System.Collections.Generic;
using Tango.DBObservablesGenerator.CLI;

namespace Tango.UnitTesting
{
    [TestClass]
    [TestCategory("Code Generation")]
    public class CodeGeneration_TST
    {
        [TestMethod]
        public void Generate_DAL_Observable_Entities()
        {
            String tempPath = Helper.GetTempFolderPath();

            ObservablesGenerator generator = new ObservablesGenerator();
            generator.GenerateCSharp(tempPath);

            Helper.ShowInExplorer(tempPath);
        }

        [TestMethod]
        public void Load_Observable_Machines()
        {
            //using (RemoteDB db = new RemoteDB(SettingsManager.Default.DataBase.SQLServerAddress, false))
            //{
            //    List<Machine> machines = db.MACHINES.ToList().Select(x => new Machine(x)).ToList();

            //    foreach (var machine in machines)
            //    {
            //        machine.SerialNumber = "1111";
            //        machine.Organization.Address.AddressString = "HOW HOW HOW";
            //        machine.Save();
            //    }
            //}
        }
    }
}
eric.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
package com.twine.tango.transport.adapters;

import android.os.SystemClock;

import com.twine.tango.core.ObjectDisposedException;
import com.twine.tango.transport.TransportAdapterBase;
import com.twine.tango.transport.TransportAdapterMode;
import com.twine.tango.transport.TransportComponentState;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.Selector;

import io.reactivex.Completable;
import io.reactivex.schedulers.Schedulers;

/**
 * Represents an {@link com.twine.tango.transport.ITransportAdapter} which communicates over TCP/IP.
 */
public class TcpTransportAdapter extends TransportAdapterBase
{
    
    private Socket socket;
    private int port;
    private Thread pullThread;
    private boolean initializedFromConstructor;
    private Selector selector;
    
    //region Constructors
    
    public TcpTransportAdapter()
    {
        super();
        setAddress("127.0.0.1");
        setPort(9999);
        setAdapterMode(TransportAdapterMode.PREPEND_HEADER);
    }
    
    public TcpTransportAdapter(String address, int port)
    {
        this();
        setAddress(address);
        setPort(port);
    }
    
    public TcpTransportAdapter(Socket socket)
    {
        this();
        initializedFromConstructor = true;
        this.socket = socket;
    }
    
    //endregion
    
    //region Properties
    
    public int getPort()
    {
        return port;
    }
    
    public void setPort(int port)
    {
        this.port = port;
    }
    
    //endregion
    
    //region Public Methods
    
    @Override
    public Completable connect()
    {
        return Completable.create((x) ->
        {
            try
            {
                throwIfDisposed();
                
                if (getState() != TransportComponentState.Connected)
                {
                    if (!initializedFromConstructor)
                    {
                        socket = new Socket();
                        socket.connect(new InetSocketAddress(getAddress(), getPort()), 2000);
                        //selector = Selector.open();
                        //socket.getChannel().register(selector, SelectionKey.OP_READ);
                    }
                    
                    setState(TransportComponentState.Connected);
                    pullThread = new Thread(this::pullThreadMethod);
                    pullThread.setName("Adapter Pull Thread");
                    pullThread.start();
                    logManager.log("TCP adapter connected...");
                    x.onComplete();
                }
            }
            catch (Exception e)
            {
                logManager.log("Could not connect the TCP adapter.");
                x.onError(e);
            }
        }).subscribeOn(Schedulers.io());
    }
    
    @Override
    public Completable disconnect()
    {
        return Completable.create((x) ->
        {
            
            try
            {
                if (getState() == TransportComponentState.Connected)
                {
                    socket.getInputStream().close();
                    try
                    {
                        socket.getOutputStream().close();
                        socket.close();
                    }
                    catch (Exception e)
                    {
                        //Ignore further disposing attempts failure.
                    }
                    setState(TransportComponentState.Disconnected);
                    logManager.log("TCP adapter disconnected.");
                    x.onComplete();
                }
            }
            catch (IOException e)
            {
                logManager.log(e, "Could not disconnect the TCP adapter.");
                x.onError(e);
            }
            
        }).subscribeOn(Schedulers.io());
    }
    
    @Override
    public void write(byte[] data) throws ObjectDisposedException, IOException
    {
        throwIfDisposed();
        
        try
        {
            socket.getOutputStream().write(postProcessBuffer(data));
        }
        catch (IOException e)
        {
            onFailed(e);
        }
    }
    
    //endregion
    
    //region Pull Thread
    
    private void pullThreadMethod()
    {
        try
        {
            
            while (getState() == TransportComponentState.Connected)
            {
                InputStream stream = socket.getInputStream();
                
                if (getAdapterMode() == TransportAdapterMode.NO_HEADER)
                {
                    if (stream.available() > 0)
                    {
                        byte[] data = new byte[stream.available()];
                        int read = stream.read(data);
                        
                        if (read == -1)
                        {
                            throw new SocketException("Error reading from TCP adapter.");
                        }
                        
                        onDataAvailable(data);
                    }
                }
                else
                {
                    if (stream.available() > 4)
                    {
                        byte[] size = new byte[4];
                        
                        int read = stream.read(size, 0, size.length);
                        
                        if (read == -1)
                        {
                            throw new SocketException("Error reading from TCP adapter.");
                        }
                        
                        int expectedSize = ByteBuffer.wrap(size).order(ByteOrder.LITTLE_ENDIAN).getInt();
                        
                        byte[] data = new byte[expectedSize];
                        read = 0;
                        
                        while (read < expectedSize)
                        {
                            read += stream.read(data, read, Math.min(stream.available(), expectedSize - read));
                            
                            if (getState() != TransportComponentState.Connected)
                            {
                                break;
                            }
                        }
                        
                        onDataAvailable(data);
                    }
                }
                
                SystemClock.sleep(10);
            }
            
        }
        catch (Exception e)
        {
            onFailed(e);
        }
        
    }
    
    //endregion
    
    //region Private Methods
    
    private void setSocketProperties()
    {
        try
        {
            socket.setReceiveBufferSize(MAX_BUFFER_SIZE);
            socket.setSendBufferSize(MAX_BUFFER_SIZE);
        }
        catch (SocketException e)
        {
            e.printStackTrace();
        }
    }
    
    //endregion
}