rstyx 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rstyx/server.rb +48 -5
- data/lib/rstyx/version.rb +2 -2
- metadata +2 -2
data/lib/rstyx/server.rb
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
# Copyright:: Copyright (c) 2005-2007 Rafael R. Sevilla
|
37
37
|
# License:: GNU Lesser General Public License
|
38
38
|
#
|
39
|
-
# $Id: server.rb
|
39
|
+
# $Id: server.rb 234 2007-08-14 11:17:13Z dido $
|
40
40
|
#
|
41
41
|
require 'thread'
|
42
42
|
require 'monitor'
|
@@ -652,8 +652,9 @@ module RStyx
|
|
652
652
|
rescue Exception => e
|
653
653
|
# if there was a problem removing the file, ignore it
|
654
654
|
end
|
655
|
-
sf.remove_client(sfc)
|
656
655
|
end
|
656
|
+
sf.remove_client(sfc)
|
657
|
+
@fids.delete(fid)
|
657
658
|
end
|
658
659
|
end
|
659
660
|
|
@@ -865,7 +866,7 @@ module RStyx
|
|
865
866
|
class SFile < Monitor
|
866
867
|
|
867
868
|
attr_reader :name, :uid, :gid, :muid, :mtime
|
868
|
-
attr_accessor :permissions, :atime, :parent
|
869
|
+
attr_accessor :permissions, :atime, :parent, :version
|
869
870
|
|
870
871
|
##
|
871
872
|
# Create a new file object with the given permissions.
|
@@ -921,6 +922,8 @@ module RStyx
|
|
921
922
|
# The clients who have a connection to the file
|
922
923
|
@clients = []
|
923
924
|
@clients.extend(MonitorMixin)
|
925
|
+
# Change listeners
|
926
|
+
@changelisteners = []
|
924
927
|
end
|
925
928
|
|
926
929
|
##
|
@@ -1121,7 +1124,7 @@ module RStyx
|
|
1121
1124
|
# written to. It should return the number of bytes actually
|
1122
1125
|
# "written".
|
1123
1126
|
#
|
1124
|
-
def write(client, offset,
|
1127
|
+
def write(client, offset, data, truncate)
|
1125
1128
|
raise StyxException.new("Cannot write to this file")
|
1126
1129
|
end
|
1127
1130
|
|
@@ -1184,12 +1187,25 @@ module RStyx
|
|
1184
1187
|
def client_disconnected(cl)
|
1185
1188
|
end
|
1186
1189
|
|
1190
|
+
def add_changelistener(&block)
|
1191
|
+
@changelisteners << block
|
1192
|
+
end
|
1193
|
+
|
1187
1194
|
def contents_changed
|
1188
1195
|
version_incr
|
1196
|
+
@changelisteners.each do |listener|
|
1197
|
+
listener.call(self)
|
1198
|
+
end
|
1189
1199
|
end
|
1190
1200
|
|
1191
1201
|
def version_incr
|
1192
|
-
|
1202
|
+
@version = ((@version + 1) & 0xffffffffffffffff)
|
1203
|
+
end
|
1204
|
+
|
1205
|
+
def reply_write(count, session)
|
1206
|
+
self.set_mtime(Time.now, session.user)
|
1207
|
+
self.contents_changed
|
1208
|
+
return(Message::Rwrite.new(:count => count))
|
1193
1209
|
end
|
1194
1210
|
|
1195
1211
|
def refresh
|
@@ -1293,11 +1309,38 @@ module RStyx
|
|
1293
1309
|
class InMemoryFile < SFile
|
1294
1310
|
attr_accessor :contents
|
1295
1311
|
|
1312
|
+
def initialize(name, argv={ :permissions => 0666, :apponly => false,
|
1313
|
+
:excl => false, :uid => ENV["USER"],
|
1314
|
+
:gid => ENV["GROUP"] })
|
1315
|
+
super(name, argv)
|
1316
|
+
@contentslock = Mutex.new
|
1317
|
+
end
|
1318
|
+
|
1296
1319
|
def read(client, offset, count)
|
1297
1320
|
data = @contents[offset..(offset+count)]
|
1298
1321
|
data ||= ""
|
1299
1322
|
return(Message::Rread.new(:data => data))
|
1300
1323
|
end
|
1324
|
+
|
1325
|
+
def write(client, offset, data, truncate)
|
1326
|
+
@contentslock.synchronize do
|
1327
|
+
# First write to the file
|
1328
|
+
if @contents.nil?
|
1329
|
+
@contents = ""
|
1330
|
+
end
|
1331
|
+
|
1332
|
+
if offset > @contents.length
|
1333
|
+
raise StyxException.new("attempt to write past the end of the file")
|
1334
|
+
end
|
1335
|
+
|
1336
|
+
@contents[offset..(offset + data.length)] = data
|
1337
|
+
if (truncate)
|
1338
|
+
@contents = @contents[0..(offset+data.length)]
|
1339
|
+
end
|
1340
|
+
return(reply_write(data.length, client.session))
|
1341
|
+
end
|
1342
|
+
end
|
1343
|
+
|
1301
1344
|
end
|
1302
1345
|
|
1303
1346
|
end # module Server
|
data/lib/rstyx/version.rb
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
#
|
21
21
|
# RStyx version code
|
22
22
|
#
|
23
|
-
# $Id: version.rb
|
23
|
+
# $Id: version.rb 235 2007-08-14 11:17:48Z dido $
|
24
24
|
#
|
25
25
|
|
26
26
|
module RStyx
|
@@ -28,7 +28,7 @@ module RStyx
|
|
28
28
|
|
29
29
|
MAJOR = 0
|
30
30
|
MINOR = 3
|
31
|
-
TINY =
|
31
|
+
TINY = 1
|
32
32
|
|
33
33
|
# The version of RStyx in use.
|
34
34
|
STRING = [ MAJOR, MINOR, TINY ].join(".")
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rstyx
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.3.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.3.1
|
7
|
+
date: 2007-08-14 00:00:00 +08:00
|
8
8
|
summary: RStyx is a Ruby implementation of the 9P2000/Styx distributed file protocol used on Plan 9 and Inferno.
|
9
9
|
require_paths:
|
10
10
|
- lib
|