[Red5] Red5.getConnectionLocal() from SchedulerJob returns null
Andy
bowljoman at hotmail.com
Mon Nov 19 15:54:36 PST 2007
Sergey
I have created a class on the server to represent the client , holding
all his important stuff, as well as a reference to the IConnection.
The list arrays make this work very easy, and I have even implemented
the very use you describe. But there is a better way.
The easier way is for your IScheduledJob class to take the Application
scope or some scope in the constructor, and store a reference. When it
is executed, it already has all the clients and connections for the
scope it was given.
-----Original Message-----
From: red5-bounces at osflash.org [mailto:red5-bounces at osflash.org] On
Behalf Of Mamontov Sergey V.
Sent: Monday, November 19, 2007 1:19 PM
To: kyoung wan park
Subject: Re: [Red5] Red5.getConnectionLocal() from SchedulerJob returns
null
Kyoun,
Who told You that? :)
If my Streamer extends ApplicationAdapter, he also implements all of his
methods, and methods of MultithreadApplicationAdapter :)
Someone explain me, what Scheduling service invoking already in other
thread, so it haven't access to all IConnection what was created in
previous thread :(
I see only on possible solution, not very elegance, but i think it will
work, I will use SharedObject and events for it. When scheduler will
execute, he will write some flag to corresponding user, meantime main
application have listeners on shardeobject change. Listener will iterate
through all connection and search user whom sharedobject was changed in
the connection of application and then invoke corresponding actions.
This is really not very good, but only one right solution for situation,
when after executing of scheduler I need to to do something with client
playback.
I will accept any possible variations on this theme :)
Regards,
Sergey
> Why next code is possible
> it is because Application class implements ISchedulingService
interface
> Application app = (Application)service;
> but your streamer not implement that interface
> so your code not permited
> I'm sorry I can't help you
> Date: Mon, 19 Nov 2007 22:02:42 +0200
> From: moonlight at ua.elro.com
> To: red5 at osflash.org
> Subject: Re: [Red5] Red5.getConnectionLocal() from SchedulerJob
returns null
>
> Hi Kyoung,
>
> Thanks for example, but i still can't make it work well :(
> This is my code for ScheduledJob:
>
> class myJob30sec implements IScheduledJob{
>
> private Streamer application;
> private IScope cscope;
> private static final Log log = LogFactory.getLog(myJob30sec.class);
>
> public myJob30sec(Streamer app, IScope scope){
> cscope = scope;
> application = app;
> }
>
> public void execute(ISchedulingService service) throws
> CloneNotSupportedException {
> Iterator<IConnection> iter = application.getConnectionsIter();
> while (iter.hasNext()) {
> IConnection conn = iter.next();
> if (conn.getScope().equals(cscope))
> {
> IStreamService pservice = (IStreamService)
conn.getScope().getContext().getBean(IStreamService.BEAN_NAME);
> log.info("@_scheduler_@ service name "+pservice);
> pservice.seek(80000);
> }
> log.info("hi connection");
> }
> }
> }
>
>
> When I start job, I pass to it my main application named "Streamer",
and scope of current user ( they can be many ).
>
> In result I need to make some action with stream, which is currently
playing for selected user, for example seek forward on 80 seconds.
>
> When I trying do something like this in myJob30sec:
> Streamer app = (Streamer)service;
> the error appear, that:
> Job com.ppfm.myJob30sec at 14c0275 execution failed:
org.red5.server.scheduling.QuartzSchedulingService cannot be cast to
com.ppfm.Streamer
>
> If it possible, someone help me, or soon I will be punished.
>
>
> Regards,
>
>
> Sergey
>
>
>
> >
> > hi John
> >
> > you can access Application via IScheduleJob interface,
> > but except a few method of StreamService, i think you can not
> > access Appilcation via IStreamService
> >
> > next code is works
> > test it and find your answer
> >
> > public class DummyScheduleJob implements IScheduledJob {
> > private static final Log log = LogFactory.getLog(Application.class);
> > public void execute(ISchedulingService service)
> > throws CloneNotSupportedException {
> > // TODO Auto-generated method stub
> > log.info("dummy schedule joing executed");
> > Application app = (Application)service;
> > Iterator<IConnection> iter = app.getConnectionsIter();
> > while (iter.hasNext()) {
> > IConnection conn = iter.next();
> > log.info("hi connection");
> > }
> > }
> > }
> >
>
> >
> >
> >
>
> > Date: Sun, 18 Nov 2007 12:35:34 +0200
> > From: moonlight at ua.elro.com
> > To: red5 at osflash.org
> > Subject: Re: [Red5] Red5.getConnectionLocal() from SchedulerJob
returns null
>
> >
>
> > John,
> >
>
> > Hello :)
> > I still don't understand how to make custom events in application.
> > And after I found attribute with of corresponding JobName, how can I
> > invoke to pause sever stream exactly for this client?
> >
>
> > P.S. maybe someone found better solution, maybe native for Red5,
this will be great :)
> >
>
> > Regards,
> >
>
> > Sergey
> >
>
> > >
> > I looked at the title of this email and I did a double take
> > because I had a "saved" email that I was going to send later with
> > pretty much the Exact title. =) I thought gmail accidently sent my
saved email hahaha
> >
>
> > anyway, I found that the way Red5.getconnectionlocal() works only
> > allows the local Thread to the IConnection to have access. Since
> > SchedulerJob is a completely separate thread, it does not had access
to IConnection.
> >
>
> > I havent found a good solution for this yet, but for now Im
> > setting an attribute to the IClient at appconnect and on the
> > execute() method I loop through the client for the matching
attribute and do my thing.
> >
>
> >
>
> >
>
> >
>
> > On Nov 16, 2007 9:22 AM, Mamontov Sergey V. <moonlight at ua.elro.com>
wrote:
> >
>
> > Hi,
> >
>
> > During me development I've discovered some new strange thing. When
I'm
> > trying to add some Scheduler in my application, calling of
> > Red5.getConnectionLocal(); return me "null" as connection, when
> > calling it from body of ShedulerJob, mean time, same call in main
> > class return me connection info.
> >
>
> > This is small, but main part of class, witch causing strange
behavior.
> >
>
> > public class CustomStreamService extends StreamService implements
IScheduledJob {
> >
>
> > public void play (String name){
> >
>
> > IConnection conn = Red5.getConnectionLocal();
> > ISchedulingService service = (ISchedulingService)
> > conn.getScope().getContext().getBean(ISchedulingService.BEAN_NAME );
> > ClientData client =
> > ((ClientData)conn.getClient().getAttribute("client"));
> > String clientId = client.getId();
> > log.info("@_StreamService_@ Connection info: "+conn); //<- works
> > great ("Connection RTMPMinaConnection from XX.XXX.XXX.XXX:1245 to
> > XX.XXX.XXX.XXX (in: 3719, out: 5329) ")
> > startPlayBackWatcher();
> > }
> >
>
> > public void startPlayBackWatcher(){
> >
>
> > IConnection conn = Red5.getConnectionLocal();
> > ISchedulingService service = (ISchedulingService)
> > conn.getScope().getContext().getBean(ISchedulingService.BEAN_NAME);
> > ClientData client =
> > ((ClientData)conn.getClient().getAttribute("client"));
> > String jobName1 = service.addScheduledOnceJob(5000, this);
> > }
> >
>
> > public void execute(ISchedulingService service) throws
> > CloneNotSupportedException {
> > IConnection conn = Red5.getConnectionLocal ();
> > pause(true, 15000);
> > log.info("@_StreamService_@ Connection info: "+conn); //<-
> > doesn't work :( ( return "null")
> > }
> >
>
> > What is wrong in my code? Please, help me :)
> > P.S. Actually I'm not really good Java developer, Flash is My life
> > :)
> >
>
> >
>
> > Regards,
> >
>
> > Sergey
> >
>
> >
>
> > _______________________________________________
> > Red5 mailing list
> > Red5 at osflash.org
> > http://osflash.org/mailman/listinfo/red5_osflash.org
> >
>
> >
>
> >
>
> >
>
> > --
> > ?? ???????????,
> > Mamontov mailto:moonlight at ua.elro.com
>
>
> > Explore the seven wonders of the world Learn more!
>
>
> _______________________________________________
> Red5 mailing list
> Red5 at osflash.org
> http://osflash.org/mailman/listinfo/red5_osflash.org
Explore the seven wonders of the world Learn more!
_______________________________________________
Red5 mailing list
Red5 at osflash.org
http://osflash.org/mailman/listinfo/red5_osflash.org
More information about the Red5
mailing list