33using System ;
44using System . Collections ;
55using System . Collections . Generic ;
6- using System . IO ;
76using System . Text ;
87using System . Threading ;
98using WebSocketSharp ;
@@ -31,65 +30,6 @@ public AudioStreamer (string url)
3130 configure ( ) ;
3231 }
3332
34- private AudioMessage acceptBinaryMessage ( byte [ ] data )
35- {
36- var id = data . SubArray ( 0 , 4 ) . To < uint > ( ByteOrder . Big ) ;
37- var chNum = data . SubArray ( 4 , 1 ) [ 0 ] ;
38- var bufferLength = data . SubArray ( 5 , 4 ) . To < uint > ( ByteOrder . Big ) ;
39- var bufferArray = new float [ chNum , bufferLength ] ;
40-
41- var offset = 9 ;
42- ( ( int ) chNum ) . Times (
43- i => bufferLength . Times (
44- j => {
45- bufferArray [ i , j ] = data . SubArray ( offset , 4 ) . To < float > ( ByteOrder . Big ) ;
46- offset += 4 ;
47- } ) ) ;
48-
49- return new AudioMessage {
50- user_id = id ,
51- ch_num = chNum ,
52- buffer_length = bufferLength ,
53- buffer_array = bufferArray
54- } ;
55- }
56-
57- private NotificationMessage acceptTextMessage ( string data )
58- {
59- var json = JObject . Parse ( data ) ;
60- var id = ( uint ) json [ "user_id" ] ;
61- var name = ( string ) json [ "name" ] ;
62- var type = ( string ) json [ "type" ] ;
63-
64- string message ;
65- if ( type == "message" )
66- message = String . Format ( "{0}: {1}" , name , ( string ) json [ "message" ] ) ;
67- else if ( type == "start_music" )
68- message = String . Format ( "{0}: Started playing music!" , name ) ;
69- else if ( type == "connection" ) {
70- var users = ( JArray ) json [ "message" ] ;
71- var msg = new StringBuilder ( "Now keeping connections:" ) ;
72- foreach ( JToken user in users )
73- msg . AppendFormat (
74- "\n - user_id: {0} name: {1}" , ( uint ) user [ "user_id" ] , ( string ) user [ "name" ] ) ;
75-
76- message = msg . ToString ( ) ;
77- }
78- else if ( type == "connected" ) {
79- _id = id ;
80- _heartbeatTimer . Change ( 30000 , 30000 ) ;
81- message = String . Format ( "user_id: {0} name: {1}" , id , name ) ;
82- }
83- else
84- message = "Received unknown type message." ;
85-
86- return new NotificationMessage {
87- Summary = String . Format ( "AudioStreamer ({0})" , type ) ,
88- Body = message ,
89- Icon = "notification-message-im"
90- } ;
91- }
92-
9333 private void configure ( )
9434 {
9535#if DEBUG
@@ -99,15 +39,16 @@ private void configure ()
9939 _websocket . Send ( createTextMessage ( "connection" , String . Empty ) ) ;
10040
10141 _websocket . OnMessage += ( sender , e ) => {
102- if ( e . Type == Opcode . Text )
103- _notifier . Notify ( acceptTextMessage ( e . Data ) ) ;
42+ if ( e . Type == Opcode . Text ) {
43+ _notifier . Notify ( convertTextMessage ( e . Data ) ) ;
44+ }
10445 else {
105- var msg = acceptBinaryMessage ( e . RawData ) ;
46+ var msg = convertBinaryMessage ( e . RawData ) ;
10647 if ( msg . user_id == _id )
10748 return ;
10849
10950 if ( _audioBox . ContainsKey ( msg . user_id ) ) {
110- _audioBox [ msg . user_id ] . Enqueue ( msg . buffer_array ) ;
51+ _audioBox [ msg . user_id ] . Enqueue ( msg . buffer_array ) ;
11152 return ;
11253 }
11354
@@ -134,21 +75,83 @@ private void configure ()
13475 } ) ;
13576 }
13677
137- private byte [ ] createAudioMessage ( float [ , ] bufferArray )
78+ private AudioMessage convertBinaryMessage ( byte [ ] data )
79+ {
80+ var id = data . SubArray ( 0 , 4 ) . To < uint > ( ByteOrder . Big ) ;
81+ var chNum = data . SubArray ( 4 , 1 ) [ 0 ] ;
82+ var buffLen = data . SubArray ( 5 , 4 ) . To < uint > ( ByteOrder . Big ) ;
83+ var buffArr = new float [ chNum , buffLen ] ;
84+
85+ var offset = 9 ;
86+ ( ( int ) chNum ) . Times (
87+ i => buffLen . Times (
88+ j => {
89+ buffArr [ i , j ] = data . SubArray ( offset , 4 ) . To < float > ( ByteOrder . Big ) ;
90+ offset += 4 ;
91+ } ) ) ;
92+
93+ return new AudioMessage {
94+ user_id = id ,
95+ ch_num = chNum ,
96+ buffer_length = buffLen ,
97+ buffer_array = buffArr
98+ } ;
99+ }
100+
101+ private NotificationMessage convertTextMessage ( string data )
102+ {
103+ var json = JObject . Parse ( data ) ;
104+ var id = ( uint ) json [ "user_id" ] ;
105+ var name = ( string ) json [ "name" ] ;
106+ var type = ( string ) json [ "type" ] ;
107+
108+ string body ;
109+ if ( type == "message" ) {
110+ body = String . Format ( "{0}: {1}" , name , ( string ) json [ "message" ] ) ;
111+ }
112+ else if ( type == "start_music" ) {
113+ body = String . Format ( "{0}: Started playing music!" , name ) ;
114+ }
115+ else if ( type == "connection" ) {
116+ var users = ( JArray ) json [ "message" ] ;
117+ var buff = new StringBuilder ( "Now keeping connections:" ) ;
118+ foreach ( JToken user in users )
119+ buff . AppendFormat (
120+ "\n - user_id: {0} name: {1}" , ( uint ) user [ "user_id" ] , ( string ) user [ "name" ] ) ;
121+
122+ body = buff . ToString ( ) ;
123+ }
124+ else if ( type == "connected" ) {
125+ _id = id ;
126+ _heartbeatTimer . Change ( 30000 , 30000 ) ;
127+ body = String . Format ( "user_id: {0} name: {1}" , id , name ) ;
128+ }
129+ else {
130+ body = "Received unknown type message." ;
131+ }
132+
133+ return new NotificationMessage {
134+ Summary = String . Format ( "AudioStreamer ({0})" , type ) ,
135+ Body = body ,
136+ Icon = "notification-message-im"
137+ } ;
138+ }
139+
140+ private byte [ ] createBinaryMessage ( float [ , ] bufferArray )
138141 {
139142 var msg = new List < byte > ( ) ;
140143
141144 var id = ( uint ) _id ;
142145 var chNum = bufferArray . GetLength ( 0 ) ;
143- var bufferLength = bufferArray . GetLength ( 1 ) ;
146+ var buffLen = bufferArray . GetLength ( 1 ) ;
144147
145148 msg . AddRange ( id . ToByteArray ( ByteOrder . Big ) ) ;
146149 msg . Add ( ( byte ) chNum ) ;
147- msg . AddRange ( ( ( uint ) bufferLength ) . ToByteArray ( ByteOrder . Big ) ) ;
150+ msg . AddRange ( ( ( uint ) buffLen ) . ToByteArray ( ByteOrder . Big ) ) ;
148151
149152 chNum . Times (
150- i => bufferLength . Times (
151- j => msg . AddRange ( bufferArray [ i , j ] . ToByteArray ( ByteOrder . Big ) ) ) ) ;
153+ i => buffLen . Times (
154+ j => msg . AddRange ( bufferArray [ i , j ] . ToByteArray ( ByteOrder . Big ) ) ) ) ;
152155
153156 return msg . ToArray ( ) ;
154157 }
0 commit comments