screenxtv 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/screenxtv.rb +51 -29
  2. metadata +2 -2
data/lib/screenxtv.rb CHANGED
@@ -140,7 +140,7 @@ conf_scan=[
140
140
  match:/^[_a-zA-Z0-9]*$/,
141
141
  errmsg:'You can use only alphabets, numbers and underscore.'
142
142
  },
143
- {key:"screen",value:"screenxtv"},
143
+ {key:"screen",value:"screenxtv_public"},
144
144
  {key:"screen_private",value:"screenxtv_private"},
145
145
  {
146
146
  key:"color",msg:"Terminal Color [BLACK/white/green/novel]",
@@ -253,7 +253,7 @@ File.write conf_file,conf.to_yaml
253
253
  info={
254
254
  'url'=>url,
255
255
  'authorized'=>conf['urlhash']==url+"/"+(conf['auth_key']||''),
256
- 'private'=>argv[:private]
256
+ 'private'=>argv[:private]
257
257
  }
258
258
  ENV['SCREENXTV_BROADCASTING']=info.to_json
259
259
  show_info(info)
@@ -269,6 +269,7 @@ begin
269
269
  }
270
270
  rescue
271
271
  end
272
+ screenrc.write "term xterm-256color\n"
272
273
  screenrc.write "hardstatus alwayslastline 'http://#{HOST}/#{url}'\n"
273
274
  screenrc.flush
274
275
  rescue
@@ -286,37 +287,58 @@ Thread.new{
286
287
  }
287
288
 
288
289
  begin
289
- master,slave=PTY.open
290
- ENV['TERM']='vt100'
291
290
  ENV['LANG']='en_US.UTF-8'
292
- master.winsize=STDOUT.winsize
293
291
  screen_name=argv[:private] ? conf['screen_private'] : conf['screen']
294
- rr,ww,pid = PTY::getpty("screen -x #{screen_name} -R",in:slave,out:master)
295
- winsize=->{
296
- height,width=master.winsize=rr.winsize=STDOUT.winsize
297
- socket.send 'winch',{width:width,height:height}.to_json
298
- }
299
- winsize.call
300
- resized=false
301
- Thread.new{
302
- loop do
303
- sleep 0.1
304
- if resized
305
- resized=false
306
- winsize.call
292
+ PTY::getpty "screen -x #{screen_name} -R" do |rr,ww|
293
+ winsize=->{
294
+ height,width=ww.winsize=rr.winsize=STDOUT.winsize
295
+ socket.send 'winch',{width:width,height:height}.to_json
296
+ }
297
+ winsize.call
298
+ resized=false
299
+ Thread.new{
300
+ loop do
301
+ sleep 0.1
302
+ if resized
303
+ resized=false
304
+ winsize.call
305
+ end
307
306
  end
307
+ }
308
+ Signal.trap(:SIGWINCH){resized=true}
309
+ Signal.trap(:SIGCHLD){stop "broadcast end"}
310
+ Thread.new{
311
+ loop do
312
+ ww.write STDIN.getch
313
+ end
314
+ }
315
+ data=''
316
+ while(data+=rr.readpartial 1024)
317
+ ncount=code=0
318
+ [4,data.length].min.times do
319
+ c=data[data.length-ncount-1]
320
+ code=c.ord
321
+ ncount+=1
322
+ break if code&0x80==0 or code&0x40!=0
323
+ end
324
+ if code&0x80==0 or code&0x40==0
325
+ ncount=0
326
+ elsif code&0x20==0
327
+ ncount=0 if ncount==2
328
+ elsif code&0x10==0
329
+ ncount=0 if ncount==3
330
+ elsif code&0x08==0
331
+ ncount=0 if ncount==4
332
+ elsif code&0x04==0
333
+ ncount=0 if ncount==5
334
+ elsif code&0x02==0
335
+ ncount=0 if ncount==6
336
+ end
337
+ odata=data[0,data.size-ncount]
338
+ print odata
339
+ socket.send 'data',odata
340
+ data=data[data.size-ncount,ncount]
308
341
  end
309
- }
310
- Signal.trap(:SIGWINCH){resized=true}
311
- Signal.trap(:SIGCHLD){stop "broadcast end"}
312
- Thread.new{
313
- loop do
314
- master.write STDIN.getch
315
- end
316
- }
317
- while(data=master.readpartial 1024)
318
- print data
319
- socket.send 'data',data
320
342
  end
321
343
  rescue
322
344
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: screenxtv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-15 00:00:00.000000000 Z
12
+ date: 2013-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json