コード例 #1
0
ファイル: Net.cs プロジェクト: karliky/wowwow
 public void Send( int opcode, byte []buffer, int len )
 {
     if ( buffer == null )
         return;
     mutex.WaitOne();
     if ( result == null )
         result=new ByteArrayBuilder();
     byte []nb = null;
     if ( len == buffer.Length )
         nb = buffer;
     else
     {
         nb = new byte[ len ];
         Buffer.BlockCopy( buffer, 0, nb, 0, len );
     }
     len -=2;
     nb[ 1 ] = (byte)( len & 0xff );
     nb[ 0 ] = (byte)( ( len >> 8 ) & 0xff );
     nb[ 2 ] = (byte)( opcode & 0xff );
     nb[ 3 ] = (byte)( ( opcode >> 8 ) & 0xff );
     if ( needEncode )
         Encode( nb );
     result.Add( nb );
     mutex.ReleaseMutex();
 }
コード例 #2
0
ファイル: Net.cs プロジェクト: karliky/wowwow
 public void Send( OpCodes opcode, byte []buffer )
 {
     if ( buffer == null )
         return;
     mutex.WaitOne();
     if ( result == null )
         result=new ByteArrayBuilder();
     buffer[ 1 ] = (byte)( ( buffer.Length - 2 ) & 0xff );
     buffer[ 0 ] = (byte)( ( ( buffer.Length - 2 ) >> 8 ) & 0xff );
     buffer[ 2 ] = (byte)( (int)opcode & 0xff );
     buffer[ 3 ] = (byte)( ( (int)opcode >> 8 ) & 0xff );
     if ( needEncode )
         Encode( buffer );
     result.Add( buffer );
     mutex.ReleaseMutex();
 }
コード例 #3
0
ファイル: Net.cs プロジェクト: karliky/wowwow
        public override void RunSend()
        {
            mutex.WaitOne();
            if(result==null)
                return;

            int sz=sock.Send(result);
            if( sz <= 0 )
            {
                Dispose();
                return;
            }

            if(result.Length > sz)
            {
            //	HexViewer.View( result, 0, sz );
                result.Remove(0, sz);
                return;
            }
            result=null;
            mutex.ReleaseMutex();
            return;
        }
コード例 #4
0
ファイル: Net.cs プロジェクト: karliky/wowwow
        public void Send( byte []buffer )
        {
            if ( buffer == null )
                return;
            mutex.WaitOne();
            if ( result == null )
                result=new ByteArrayBuilder();
            if ( needEncode )
                Encode( buffer );

            result.Add( buffer );
            mutex.ReleaseMutex();
        }
コード例 #5
0
ファイル: Net.cs プロジェクト: karliky/wowwow
        void iSend(ServerGroupMessageType type, Hashtable msg)
        {
            ByteArrayBuilder b=new ByteArrayBuilder(false);
            b.Add( (byte)type );

            uint id=GetID();
            sendids.Add(id);
            if(sendids.Count>100)sendids.Remove(0);
            b.Add( id );

            MemoryStream ms=new MemoryStream();

            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(ms, msg);
            b.Add( ms.ToArray() );
            byte[] bs=b;

            sock.SendTo(bs, target);

            DoRecv(bs, bs.Length);
        }