277 |
277 |
278 macBytes := self class getValidMACAddress. |
278 macBytes := self class getValidMACAddress. |
279 |
279 |
280 "use 60 bit counter of 100ns ticks since 00:00:00 15.oct 1582 (sigh)" |
280 "use 60 bit counter of 100ns ticks since 00:00:00 15.oct 1582 (sigh)" |
281 Lock critical:[ |
281 Lock critical:[ |
|
282 SequenceNumber isNil ifTrue:[ |
|
283 SequenceNumber := Random nextIntegerBetween:0 and:16383. |
|
284 ]. |
282 utcTime := self class getDtssUtcTime. |
285 utcTime := self class getDtssUtcTime. |
283 LastTime < utcTime ifTrue:[ |
286 LastTime < utcTime ifTrue:[ |
284 Increment := 0. |
287 Increment := 0. |
285 ] ifFalse:[ |
288 ] ifFalse:[ |
286 LastTime = utcTime ifTrue:[ |
289 LastTime = utcTime ifTrue:[ |
287 "clock didn't advance since last call. Simply add a tick" |
290 "clock didn't advance since last call. Simply add a tick" |
288 Increment := Increment + 1. |
291 Increment := Increment + 1. |
289 ] ifFalse:[ |
292 ] ifFalse:[ |
290 "clock went backwards increment SequenceNumber" |
293 "clock went backwards - increment SequenceNumber" |
291 Increment := 0. |
294 Increment := 0. |
292 SequenceNumber := SequenceNumber + 1. |
295 SequenceNumber := SequenceNumber + 1. |
293 SequenceNumber >= 16384 ifTrue:[SequenceNumber := 0]. |
296 SequenceNumber >= 16384 ifTrue:[SequenceNumber := 0]. |
294 ]. |
297 ]. |
295 ]. |
298 ]. |
296 SequenceNumber isNil ifTrue:[ |
|
297 SequenceNumber := Random nextIntegerBetween:0 and:16383. |
|
298 ]. |
|
299 |
299 |
300 |
|
301 LastTime := utcTime. |
300 LastTime := utcTime. |
302 utcTime := utcTime + Increment. |
301 utcTime := utcTime + Increment. |
303 ]. |
302 ]. |
304 |
303 |
305 "first 60 bits of timestamp" |
304 "first 60 bits of timestamp" |