Показать сообщение отдельно
Старый 13.11.2007, 21:42
ALiEN_ вне форума Посмотреть профиль Отправить личное сообщение для ALiEN_ Посетить домашнюю страницу ALiEN_ Найти все сообщения от ALiEN_
  № 3  
Ответить с цитированием
ALiEN_
UFO
 
Аватар для ALiEN_

Регистрация: Jul 2007
Сообщений: 173
Часть вторая:

Итак немного помучавшись, почучав друзей решил приступить к написанию простой вещи, red5 создает сокет, коннектится к внутреннему серверу и делает запрос на существование в базе данных юзера с заданным id.

Для начала я пошел в гугл и просто поискал примеры "java socket пример", и т.д. ковырялся надо сказать долго, потому что все время всплывали ошибки =) в итоге подключив несколько библиотек,
Код:
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;
я написал простую функцию, которая коннектится к серверу, шлет запрос, получает ответ и возвращает нам true или false.

Код:
private boolean getSession ( String user_id )
    {
    	
    	try {
    	
    		
    		String data = "user_id=" + user_id + "\n";
    		
    		
    		Socket sock = new Socket ();
    		
    		sock.connect ( new InetSocketAddress ( "devel3.mlan", 11717 ), 500);
    		
    		
    		PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
    		          
            out.print(data);
            
            out.flush();
    		
            
    		BufferedReader in = new BufferedReader ( new InputStreamReader ( sock.getInputStream () ) );
    	    
    	    while (!in.ready () ) {}
    	    
    	    String read = in.readLine();
    	    
    	    
    	    out.close();
    	    in.close();
    	    
    	    
    	    String falseString = "NOTFOUND";
    	    
    	    if ( read.equals (falseString) )
    	    {
    	    	
    	    	return false;
    	    	
    	    } 
    	    
    	    else
    	    {
    	    	
    	    	return true;
    	    	
    	    }
    	    
    	    
    		
    	} catch (Exception e) {
    		
    		return false;
    		
    	}
    	
    	
    	
    }

Хочется сказать несколько слов о яве. По сравнению с синтаксисом ActionScript, Java, ближе к С =)

Например обозначить функцию на яве можно так:

private boolean getSession ( String user_id )

а в АС так:

private function getSession ( String user_id ) : boolean

Так же и имена переменных:

java

String data = "user_id=" + user_id + "\n";

AS

var data:String = "user_id=" + user_id + "\n";


Как оказалось - ничего сложного.



Немного поправил основную функцию, которая теперь принимает параметром id нашей флешки.


Код:
public boolean appConnect ( IConnection conn , Object[] params )
	{
    	
		//log.info ( "Red5First.appConnect " + conn.getClient ().getId () );
		

		if ( getSession ( ( String ) params[0] ) == false )
		{
			
			rejectClient( "NOTFOUND" );
			
			return super.appConnect ( conn, params );
			
			
		}
		
		else
		{
		

			if ( conn instanceof IStreamCapableConnection )
			{
					
				IStreamCapableConnection streamConn = ( IStreamCapableConnection ) conn;
					
				SimpleConnectionBWConfig bwConfig = new SimpleConnectionBWConfig ();
					
				bwConfig.getChannelBandwidth () [IBandwidthConfigure.OVERALL_CHANNEL] = 1024 * 1024;
					
				bwConfig.getChannelInitialBurst () [IBandwidthConfigure.OVERALL_CHANNEL] = 128 * 1024;
					
				streamConn.setBandwidthConfigure ( bwConfig );
			}

			
			return super.appConnect ( conn, params );
			
		}
		
	}


Соответственно и клиентская часть притерпела изменения:

Код:
function createConnect ()
{

	nc  = new NetConnection ();
	
	nc.objectEncoding = ObjectEncoding.AMF3;
	
	nc.addEventListener ( NetStatusEvent.NET_STATUS, netStatus );
	
	nc.connect ( "rtmp://localhost/oflaDemo", "333");
	
}
Самое интересное, что все это работает! =) а как страшно было начинать!! =)))