Migrate All Communication to TCP

This commit is contained in:
2019-04-05 13:14:15 -05:00
parent 1eb07d9111
commit 83946f6878
15 changed files with 250 additions and 101 deletions
@@ -3,9 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;
namespace SharpOSC
{
@@ -22,8 +20,8 @@ namespace SharpOSC
get { return _address; }
}
string _address;
TcpClient client;
Thread receivingThread;
byte END = 0xc0;
byte ESC = 0xdb;
@@ -35,70 +33,106 @@ namespace SharpOSC
{
_port = port;
_address = address;
}
public void Send(byte[] message)
{
client = new TcpClient(Address, Port);
Console.WriteLine("Available: " + client.Available);
Console.WriteLine("Connected: " + client.Connected);
List<byte> slipData= new List<byte>();
byte[] esc_end = { ESC, ESC_END };
byte[] esc_esc = { ESC, ESC_ESC };
byte[] end = { END };
int length = message.Length;
for (int i = 0; i < length; i++)
{
if (message[i] == END)
{
slipData.AddRange(esc_end);
} else if (message[i] == ESC)
{
slipData.AddRange(esc_esc);
}
else
{
slipData.Add(message[i]);
}
}
slipData.AddRange(end);
byte[] slipData = SlipEncode(message);
NetworkStream netStream = client.GetStream();
netStream.Write(slipData.ToArray(), 0, slipData.ToArray().Length);
netStream.Close();
client.Close();
}
public void Receive()
public OscMessage Receive()
{
NetworkStream netStream = client.GetStream();
List<byte> responseData = new List<byte>();
if (netStream.CanRead)
OscMessage response = new OscMessage("/null");
try
{
byte[] buffer = new byte[512];
int bytesRead = 0;
do
NetworkStream netStream = client.GetStream();
netStream.ReadTimeout = 250;
List<byte> responseData = new List<byte>();
if (netStream.CanRead)
{
bytesRead = netStream.Read(buffer, 0, buffer.Length);
responseData.AddRange(buffer);
byte[] buffer = new byte[1024];
} while (netStream.DataAvailable);
OscMessage response = (OscMessage)OscPacket.GetPacket(responseData.Skip(1).ToArray());
int bytesRead = 0;
do
{
bytesRead = netStream.Read(buffer, 0, buffer.Length);
responseData.AddRange(buffer);
} while (netStream.DataAvailable);
response = (OscMessage)OscPacket.GetPacket(responseData.Skip(1).ToArray());
netStream.Close();
client.Close();
}
} catch(Exception e)
{
Console.WriteLine(e.ToString());
}
netStream.Close();
return response;
}
public OscMessage SendAndReceive(byte[] message)
{
client = new TcpClient(Address, Port);
byte[] slipData = SlipEncode(message);
NetworkStream netStream = client.GetStream();
netStream.Write(slipData.ToArray(), 0, slipData.ToArray().Length);
OscMessage response = Receive();
return response;
}
public OscMessage SendAndReceive(OscPacket packet)
{
byte[] data = packet.GetBytes();
OscMessage response = SendAndReceive(data);
return response;
}
public void StartReceiving()
{
receivingThread.Start();
}
public void Send(OscPacket packet)
{
byte[] data = packet.GetBytes();
Send(data);
}
public byte[] SlipEncode(byte[] data)
{
List<byte> slipData = new List<byte>();
byte[] esc_end = { ESC, ESC_END };
byte[] esc_esc = { ESC, ESC_ESC };
byte[] end = { END };
int length = data.Length;
for (int i = 0; i < length; i++)
{
if (data[i] == END)
{
slipData.AddRange(esc_end);
}
else if (data[i] == ESC)
{
slipData.AddRange(esc_esc);
}
else
{
slipData.Add(data[i]);
}
}
slipData.AddRange(end);
return slipData.ToArray();
}
public void Close()
{
client.GetStream().Close();
receivingThread.Abort();
client.Close();
}
}