С Red5 разобрался!!! Научился отдавать аудио и видео поток на Red5 из флэшки и забирать его. Текстовый чат на Red 5 можно реализовать средствами SharedObjects. Но я всётаки понял что для моего приложения нужны всётаки сокетные соединения! Теперь пытаюсь освоить взаимодействие Delphi 7 socket-server => Flash socket-klient, но как всегда возникают некоторые трудности.
Короч, вот текст сокет-сервера на делфи:
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
s := InputBox('Start chat server','Enter port:','1992');
if s = '' then {Процедура запуска сервера}
Exit;
ListBox1.Items.Clear;
ServerSocket1.Port := StrToInt(s);
ServerSocket1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear; {Процедура остановки сервера}
if ServerSocket1.Active then
ServerSocket1.Close;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var s: string;
i: Integer;
begin {Процедура прослушки входящих сообщений}
Edit1.text := Socket.ReceiveText;
s := Socket.ReceiveText;
ListBox1.Items.Add(s);
for i := 0 to ListBox1.Items.Count-1 do
s := ListBox1.Items[i]+';';
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(s);
Exit;
end;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var i: Integer;
begin
ListBox1.Items.Clear; {Процедура события "Отключение клиента"}
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText('#N');
end;
end.
На форме следующие компоненты:
Кнопка "Run server" - Button1
Кнопка "Stop server" - Button2
TSocketSever1
Список подключённых юзеров - ListBox1
Edit1(нужен просто для проверки) - выводит текст вход. сообщения.
Вот текст клиента на Flash-е:
import fl.events.*;
import flash.net.Socket;
import flash.events.MouseEvent;
//Security.loadPolicyFile("http:/95.83.66.78/crossdomain.xml");
var address:String = "127.0.0.1";
var port:int = 1992;
var socket = new Socket();
socket.connect(address, port);
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, sendedHandler)
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
btn_send.addEventListener(MouseEvent.CLICK, sendMsg);
function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
}
function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
function sendedHandler(e:ProgressEvent):void
{
txt_chat.text = String(e.currentTarget);
}
function sendMsg(e:MouseEvent):void
{
var Msg:String = txt_input.text;
try
{
socket.writeUTFBytes(Msg);
}
catch(e:IOError)
{
trace(e);
}
}
function connectHandler(e:Event):void
{
txt_chat.text = "Подключение успешно \n";
}
function closeHandler(e:Event):void
{
txt_chat.text = "Подключение закрыто \n";
}
Сначала запускаю сервер(Project1.exe), затем нажимаю на кнопку "Run server" - ввожу port "1992" - к примеру. Пока всё норм ошибок нет => Сервак стартовал.
Затем запускаю Flash-ку(Chat.swf) - и сразу в текстовом поле сообщение "Подключение успешно" => коннект успешен. Для проверки я ещё затем, ничего не закрывая, на сокет-сервере (в Project1.exe) - нажал на кнопку "Stop server" и в Flash-ке в текстовом поле сообщение "Подключение закрыто" => значит с коннектом проблем нет, флэшка действительно конектится к серверу. Но дальше возникли проблемы:
После запуска сервера и конекта флэшки к клиенту я попытался отправить сообщение из флэшки, но на сервере(Project1.exe) ни в окне Edit1 ни ListBox1 ничего не выводится, да и ошибок ни каких не выводится в Flash-е => сообщение было отправлено, но Delphi чет его не обработал!
Ребят помогите разобраться, в чём проблема? Мож с кодировкой чё? - но в любом случае ероглифы какие-нить должны были вылезти, но ничего не вылазиет.
Да ещё затем провёл несколько проверок, и выяснилось что процедура в Delphi "TForm1.ServerSocket1ClientRead" не срабатывает => событие OnClientRead не происходит. В чём дело не пойму