Allow external processing of objects in my connection system.

This commit is contained in:
Marc Hernandez 2019-06-30 17:18:01 -07:00
parent 880b23db4c
commit d9a6e8215c

92
Conn.cs
View File

@ -11,29 +11,30 @@ namespace lib
public class Conn
public interface IProcess
{
void process( object obj );
}
public class Conn
{ {
public Socket Sock { get { return m_socket; } } public Socket Sock { get { return m_socket; } }
public Stream Stream { get { return m_streamNet; } } public Stream Stream { get { return m_streamNet; } }
public IFormatter Formatter { get { return m_formatter; } }
public Conn( Socket sock, IFormatter formatter ) public Conn( Socket sock, IProcess proc )
{ {
m_socket = sock; m_socket = sock;
//sock.DontFragment = true;
sock.NoDelay = true; sock.NoDelay = true;
m_streamNet = new NetworkStream( m_socket ); m_streamNet = new NetworkStream( m_socket );
//m_streamBufIn = new BufferedStream( m_streamNet );
m_formatter = formatter;
//m_formatter = new VersionFormatter();
//mm_memStream = new MemoryStream( mm_buffer );
m_proc = proc;
} }
public object recieveObject() public object recieveObject()
@ -44,17 +45,16 @@ public class Conn
public object recieveObject( Stream stream ) public object recieveObject( Stream stream )
{ {
object obj = null; object obj = null;
lock( m_formatter )
var formatter = new XmlFormatter2();
try
{ {
try obj = formatter.Deserialize( stream );
{ }
obj = m_formatter.Deserialize( stream ); catch( System.Xml.XmlException e )
} {
catch( System.Xml.XmlException e ) lib.Log.error( "Outer Exception {0}", e.ToString() );
{
lib.Log.error( "Outer Exception {0}", e.ToString() );
//lib.Log.error( "Inner Exception {0}", e.InnerException.ToString() );
}
} }
return obj; return obj;
@ -62,44 +62,46 @@ public class Conn
public void send( object obj ) public void send( object obj )
{ {
lock( m_formatter )
var formatter = new XmlFormatter2();
try
{ {
try var ms = new MemoryStream( 1024 );
{ formatter.Serialize( ms, obj );
var ms = new MemoryStream( 1024 );
m_formatter.Serialize( ms, obj );
//var str = System.Text.Encoding.Default.GetString( mm_buffer, 0, (int)ms.Position ); //var str = System.Text.Encoding.Default.GetString( mm_buffer, 0, (int)ms.Position );
//lib.Log.info( "Sent data {0} of length {1}", str, ms.Position ); //lib.Log.info( "Sent data {0} of length {1}", str, ms.Position );
//lib.Log.info( "Sent {0}", obj ); //lib.Log.info( "Sent {0}", obj );
byte[] byteSize = BitConverter.GetBytes( (uint)ms.Position ); byte[] byteSize = BitConverter.GetBytes( (uint)ms.Position );
m_streamNet.Write( byteSize, 0, 4 ); m_streamNet.Write( byteSize, 0, 4 );
m_streamNet.Write( ms.GetBuffer(), 0, (int)ms.Position ); m_streamNet.Write( ms.GetBuffer(), 0, (int)ms.Position );
m_streamNet.Flush(); m_streamNet.Flush();
} }
catch( Exception e ) catch( Exception e )
{ {
lib.Log.warn( $"Exception sending obj {obj} of {e}" ); lib.Log.warn( $"Exception sending obj {obj} of {e}" );
throw; throw;
}
} }
} }
public virtual void recieve( object obj ) public virtual void recieve( object obj )
{ {
//Log.log.msg( "Recieved " + obj.ToString() ); if( m_proc != null ) m_proc.process( obj );
} }
private Socket m_socket; Socket m_socket;
NetworkStream m_streamNet;
IProcess m_proc;
private NetworkStream m_streamNet;
//private BufferedStream m_streamBufIn; //private BufferedStream m_streamBufIn;
//private BufferedStream m_streamBufOut; //private BufferedStream m_streamBufOut;
private IFormatter m_formatter;
} }