public void ReadWriteBEShortTestStream() { var ms = new MemoryStream(); ms.WriteBEShort(789); Assert.AreEqual(2, ms.Position); Assert.AreEqual(new byte[] { 0x03, 0x15 }, ms.ToArray()); ms.Position = 0; Assert.AreEqual(789, ms.ReadBEShort()); }
//executes in its own thread/Task private void clientThreadSpin(object cli) { TcpClient client = null; try { client = (TcpClient)cli; client.NoDelay = true; client.LingerState.Enabled = true; client.LingerState.LingerTime = Transport.Binding.SocketLingerSec; client.ReceiveBufferSize = Transport.Binding.ServerReceiveBufferSize; client.SendBufferSize = Transport.Binding.ServerSendBufferSize; client.ReceiveTimeout = Transport.Binding.ServerReceiveTimeout; client.SendTimeout = Transport.Binding.ServerSendTimeout; var nets = client.GetStream(); var ms = new MemoryStream(); ms.SetLength( ClientSite.MAX_STREAM_BYTE_LEN ); socketRead(nets, ms.GetBuffer(), 0, sizeof(short)); var fsz = ms.ReadBEShort(); if (fsz>ms.Length) throw new ProtocolException(StringConsts.GLUE_BAD_PROTOCOL_FRAME_ERROR + "ClientSite sz={0} bytes over limit{1}".Args(fsz, ms.Length), closeChannel: true); socketRead(nets, ms.GetBuffer(), sizeof(short), fsz); ms.Position = sizeof(short); var cs = new ClientSite(ms); //this will register the site with transport and start the async receive var ss = new MpxWinServerSocket(this, client, cs, this.m_SocketReceiveAction); } catch(Exception error) { if (client!=null) try{ client.Close(); } catch {} Transport.Binding.WriteLog( LogSrc.Server, Log.MessageType.Error, StringConsts.GLUE_CLIENT_THREAD_ERROR + error.ToMessageWithType(), from: "MpxWinListener.clientThreadSpin", exception: error); } }