<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -122,6 +122,22 @@ sub handle_packet_handshake {
         $self-&gt;handler( \&amp;handle_packet ); # XXX: TODO
         $self-&gt;handler-&gt;($self, $socket);
     }
+
+    # server bandwidth
+    my $server_bw = Kamaitachi::Packet-&gt;new(
+        number =&gt; 2,
+        type   =&gt; 5,
+        data   =&gt; pack('C*', 0, 0x26, 0x25, 0xa0),
+    );
+    $self-&gt;write($socket, $server_bw);
+
+    # client bandwidth
+    my $client_bw = Kamaitachi::Packet-&gt;new(
+        number =&gt; 2,
+        type   =&gt; 6,
+        data   =&gt; pack('C*', 0, 0x26, 0x25, 0xa0, 0x02),
+    );
+    $self-&gt;write($socket, $client_bw);
 }
 
 sub handle_packet {
@@ -153,23 +169,19 @@ sub packet_chunksize {
 sub packet_bytes_read {
     my ($self, $socket, $packet) = @_;
     $self-&gt;logger-&gt;debug(&quot;bytes_read packet: not implement yet&quot;);
-
-    use Data::HexDump;
-    warn HexDump($packet-&gt;raw);
-
 #    $socket-&gt;close;
 }
 
 sub packet_ping {
     my ($self, $socket, $packet) = @_;
-    $self-&gt;logger-&gt;debug(&quot;ping packet: not implement yet&quot;);
+    $self-&gt;logger-&gt;debug(&quot;bytes_read packet: not implement yet&quot;);
 #    $socket-&gt;close;
 }
 
 sub packet_server_bw {
     my ($self, $socket, $packet) = @_;
     $self-&gt;logger-&gt;debug(&quot;server_bw packet: not implement yet&quot;);
-    $socket-&gt;close;
+#    $socket-&gt;close;
 }
 
 sub packet_client_bw {
@@ -240,6 +252,7 @@ sub packet_invoke {
     if ($func-&gt;method eq 'connect') {
 #        $socket-&gt;write( pack('C*', 2,0,0,0,0,0,4,5,0,0,0,0,0,0x26,0x25,0xa0) );
 #        $socket-&gt;write( pack('C*', 2,0,0,0,0,0,5,4,0,0,0,0,0,0x26,0x25,0xa0,0x02) );
+#        $socket-&gt;write( pack('C*', 2,0,0,0,0,0,4,5,0,0,0,0,0,2,0,0) );
 
         my $res = $func-&gt;response(undef, {
             level       =&gt; 'status',
@@ -283,14 +296,38 @@ sub packet_invoke {
         warn 'play: ', $func-&gt;args-&gt;[1];
         my $parser = $self-&gt;context-&gt;parser;
 
+#        my $set_chunk_size = Kamaitachi::Packet-&gt;new(
+#            number =&gt; 2,
+#            type   =&gt; 1,
+#            data   =&gt; pack('N', 4096),
+#        );
+#        $self-&gt;write($socket, $set_chunk_size);
+#        $self-&gt;chunk_size(4096);
+
+        # aaa bbb
+        my $aaa = Kamaitachi::Packet-&gt;new(
+            number =&gt; 2,
+            type   =&gt; 4,
+            data   =&gt; pack('C*', 0, 4, 0, 0, 0, 1),
+        );
+        my $bbb = Kamaitachi::Packet-&gt;new(
+            number =&gt; 2,
+            type   =&gt; 4,
+            data   =&gt; pack('C*', 0, 0, 0, 0, 0, 1),
+        );
+
+#        $self-&gt;write($socket, $aaa);
+#        $self-&gt;write($socket, $bbb);
+
         my $onstatus = Kamaitachi::Packet-&gt;new(
             number =&gt; 6,
             type   =&gt; 0x14,
-            obj    =&gt; 0x01000000,
+            obj    =&gt; $packet-&gt;obj,
             data   =&gt; $parser-&gt;serialize('onStatus', 1, undef, {
                 level       =&gt; 'status',
                 code        =&gt; 'NetStream.Play.Reset',
                 description =&gt; '-',
+                clientid    =&gt; 1,
             }),
         );
         $self-&gt;write($socket, $onstatus);
@@ -298,16 +335,44 @@ sub packet_invoke {
         my $onstatus2 = Kamaitachi::Packet-&gt;new(
             number =&gt; 6,
             type   =&gt; 0x14,
-            obj    =&gt; 0x01000000,
+            obj    =&gt; $packet-&gt;obj,
             data   =&gt; $parser-&gt;serialize('onStatus', 1, undef, {
                 level       =&gt; 'status',
                 code        =&gt; 'NetStream.Play.Start',
                 description =&gt; '-',
+                clientid    =&gt; 1,
             }),
         );
         $self-&gt;write($socket, $onstatus2);
 
-        $self-&gt;context-&gt;{child}{ $self-&gt;id } = [$self, $socket];
+
+        #        $self-&gt;context-&gt;{child}{ $self-&gt;id } = [$self, $socket];
+        open my $fh, '&lt;', '/home/typester/dev/tmp/smile.mp3';
+
+        use MPEG::Audio::Frame;
+
+        my $stream;
+        $stream = sub {
+            my ($seconds, $bytes) = (0, 0);
+
+            while (my $frame = MPEG::Audio::Frame-&gt;read($fh)) {
+                my $audio = Kamaitachi::Packet-&gt;new(
+                    number =&gt; 4,
+                    type   =&gt; 0x08,
+                    obj    =&gt; $packet-&gt;obj,
+                    data   =&gt; pack('C', 0x2f) . $frame-&gt;asbin,
+                );
+                $seconds += $frame-&gt;seconds;
+                $bytes   += $frame-&gt;length;
+
+                $self-&gt;write($socket, $audio);
+
+                last if 0.1 &lt;= $seconds;
+            }
+
+            Danga::Socket-&gt;AddTimer($seconds, $stream);
+        };
+        Danga::Socket-&gt;AddTimer(1, $stream);
     }
 }
 </diff>
      <filename>lib/Kamaitachi/Session.pm</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>123bb54d10eb3b56a0f7a06c0e4ed14ff8a3f2c1</id>
    </parent>
  </parents>
  <author>
    <name>Daisuke Murase</name>
    <email>typester@cpan.org</email>
  </author>
  <url>http://github.com/typester/kamaitachi/commit/dc3a0066dcb585c8bf21619f4bc4740081296b20</url>
  <id>dc3a0066dcb585c8bf21619f4bc4740081296b20</id>
  <committed-date>2008-08-20T05:19:20-07:00</committed-date>
  <authored-date>2008-08-20T05:19:20-07:00</authored-date>
  <message>/home/typester/dev/tmp/smile.mp3 &#12398;&#12473;&#12488;&#12522;&#12540;&#12511;&#12531;&#12464;&#12486;&#12473;&#12488;</message>
  <tree>1807e939cb53dbf68f0592869eb0e678e8a996f2</tree>
  <committer>
    <name>Daisuke Murase</name>
    <email>typester@cpan.org</email>
  </committer>
</commit>
