Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
encounters
EncounterBasedCommunication
Commits
80948d67
Commit
80948d67
authored
Jul 05, 2018
by
LIly
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
9bb8f0d7
af1a78f6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
364 additions
and
40 deletions
+364
-40
.idea/gradle.xml
.idea/gradle.xml
+0
-1
ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/simulator/SimulatorEncounterFormationCore.java
...rformation/simulator/SimulatorEncounterFormationCore.java
+9
-38
settings.gradle
settings.gradle
+1
-1
testapp/src/main/java/org/mpisws/testapp/SimulationClient.java
...pp/src/main/java/org/mpisws/testapp/SimulationClient.java
+170
-0
testapp/src/main/java/org/mpisws/testapp/SimulationServer.java
...pp/src/main/java/org/mpisws/testapp/SimulationServer.java
+184
-0
No files found.
.idea/gradle.xml
View file @
80948d67
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
<option
name=
"modules"
>
<option
name=
"modules"
>
<set>
<set>
<option
value=
"$PROJECT_DIR$"
/>
<option
value=
"$PROJECT_DIR$"
/>
<option
value=
"$PROJECT_DIR$/ebcagent"
/>
<option
value=
"$PROJECT_DIR$/ebclibrary"
/>
<option
value=
"$PROJECT_DIR$/ebclibrary"
/>
<option
value=
"$PROJECT_DIR$/ebcmessageapp"
/>
<option
value=
"$PROJECT_DIR$/ebcmessageapp"
/>
<option
value=
"$PROJECT_DIR$/ebcutils"
/>
<option
value=
"$PROJECT_DIR$/ebcutils"
/>
...
...
ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/simulator/SimulatorEncounterFormationCore.java
View file @
80948d67
...
@@ -40,14 +40,15 @@ import static org.mpisws.encounters.EncounterBasedCommunication.CHANGE_EPOCH_TIM
...
@@ -40,14 +40,15 @@ import static org.mpisws.encounters.EncounterBasedCommunication.CHANGE_EPOCH_TIM
*/
*/
public
class
SimulatorEncounterFormationCore
implements
Runnable
{
public
class
SimulatorEncounterFormationCore
implements
Runnable
{
private
static
final
String
TAG
=
SimulatorEncounterFormationCore
.
class
.
getSimpleName
();
private
static
final
String
TAG
=
SimulatorEncounterFormationCore
.
class
.
getSimpleName
();
p
rotected
static
final
int
NUM_SIMULATED_DEVICES
=
10
;
p
ublic
static
final
int
NUM_SIMULATED_DEVICES
=
10
;
p
rivate
static
final
int
NUM_SIMULATED_EPOCHS
=
3
0
;
p
ublic
static
final
int
NUM_SIMULATED_EPOCHS
=
2
0
;
protected
static
List
<
Identifier
>
mDHPubKeys
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
mDHPubKeys
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
mDHNonces
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
mDHNonces
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
mDHFullKeys
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
mDHFullKeys
=
new
ArrayList
<>(
NUM_SIMULATED_EPOCHS
);
p
rotected
static
List
<
Identifier
>
otherDHPubKeys
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
p
ublic
static
List
<
Identifier
>
otherDHPubKeys
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
p
rotected
static
List
<
Identifier
>
otherDHNonces
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
p
ublic
static
List
<
Identifier
>
otherDHNonces
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
otherDHFullKeys
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
protected
static
List
<
Identifier
>
otherDHFullKeys
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
public
static
List
<
Identifier
>
mSharedSecrets
=
new
ArrayList
<>(
NUM_SIMULATED_DEVICES
*
NUM_SIMULATED_EPOCHS
);
protected
static
int
CURRENT_EPOCH
=
0
;
protected
static
int
CURRENT_EPOCH
=
0
;
protected
static
Identifier
mDHPubKey
;
protected
static
Identifier
mDHPubKey
;
...
@@ -81,19 +82,15 @@ public class SimulatorEncounterFormationCore implements Runnable {
...
@@ -81,19 +82,15 @@ public class SimulatorEncounterFormationCore implements Runnable {
changeEpochTime
=
System
.
currentTimeMillis
()
+
CHANGE_EPOCH_TIME
;
changeEpochTime
=
System
.
currentTimeMillis
()
+
CHANGE_EPOCH_TIME
;
encounterConfirmationAndEpochLinking
=
new
SimulatorEncounterConfirmationAndEpochLinking
(
mService
);
encounterConfirmationAndEpochLinking
=
new
SimulatorEncounterConfirmationAndEpochLinking
(
mService
);
new
EncounterEntriesBridge
(
mService
).
finalizeOldEncounters
();
new
EncounterEntriesBridge
(
mService
).
finalizeOldEncounters
();
if
(
initializeSimulatedAdverts
()
==
-
1
)
initializeSimulatedAdverts
();
throw
new
IllegalStateException
(
"No device listening to post link adverts"
);
}
}
private
int
initializeSimulatedAdverts
()
{
private
void
initializeSimulatedAdverts
()
{
Socket
clientSocket
;
List
<
Pair
<
Identifier
,
Identifier
>>
topicsToCreate
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
NUM_SIMULATED_EPOCHS
*
NUM_SIMULATED_DEVICES
;
i
++)
{
for
(
int
i
=
0
;
i
<
NUM_SIMULATED_EPOCHS
*
NUM_SIMULATED_DEVICES
;
i
++)
{
SDDR_Native
.
c_changeEpoch
();
SDDR_Native
.
c_changeEpoch
();
otherDHPubKeys
.
add
(
new
Identifier
(
SDDR_Native
.
c_getAdvertDHPubKey
()));
otherDHPubKeys
.
add
(
new
Identifier
(
SDDR_Native
.
c_getAdvertDHPubKey
()));
otherDHFullKeys
.
add
(
new
Identifier
(
SDDR_Native
.
c_getAdvertDHKey
()));
otherDHFullKeys
.
add
(
new
Identifier
(
SDDR_Native
.
c_getAdvertDHKey
()));
otherDHNonces
.
add
(
new
Identifier
(
SDDR_Native
.
c_getMyAdvert
()));
otherDHNonces
.
add
(
new
Identifier
(
SDDR_Native
.
c_getMyAdvert
()));
topicsToCreate
.
add
(
new
ImmutablePair
<>(
otherDHNonces
.
get
(
i
),
otherDHPubKeys
.
get
(
i
)));
}
}
for
(
int
i
=
0
;
i
<
NUM_SIMULATED_EPOCHS
;
i
++)
{
for
(
int
i
=
0
;
i
<
NUM_SIMULATED_EPOCHS
;
i
++)
{
SDDR_Native
.
c_changeEpoch
();
SDDR_Native
.
c_changeEpoch
();
...
@@ -106,36 +103,10 @@ public class SimulatorEncounterFormationCore implements Runnable {
...
@@ -106,36 +103,10 @@ public class SimulatorEncounterFormationCore implements Runnable {
otherDHFullKeys
.
get
(
j
+(
NUM_SIMULATED_DEVICES
*
i
)).
getBytes
(),
otherDHFullKeys
.
get
(
j
+(
NUM_SIMULATED_DEVICES
*
i
)).
getBytes
(),
mDHNonces
.
get
(
i
).
getBytes
(),
mDHNonces
.
get
(
i
).
getBytes
(),
mDHPubKeys
.
get
(
i
).
getBytes
()));
mDHPubKeys
.
get
(
i
).
getBytes
()));
topicsToCreate
.
add
(
new
ImmutablePair
<>(
s
haredSecret
,
sharedSecret
)
)
;
mS
haredSecret
s
.
add
(
sharedSecret
);
}
}
}
}
// TODO do server stuff here
Thread
thread
=
new
Thread
(()
->
{
try
{
//Replace below IP with the IP of that device in which server socket open.
//If you change port then change the port number in the server side code also.
Socket
s
=
new
Socket
(
"xxx.xxx.xxx.xxx"
,
9002
);
OutputStream
out
=
s
.
getOutputStream
();
PrintWriter
output
=
new
PrintWriter
(
out
);
output
.
println
(
msg
);
output
.
flush
();
BufferedReader
input
=
new
BufferedReader
(
new
InputStreamReader
(
s
.
getInputStream
()));
final
String
st
=
input
.
readLine
();
output
.
close
();
out
.
close
();
s
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
});
thread
.
start
();
Log
.
d
(
TAG
,
"Creating "
+
topicsToCreate
.
size
()
+
" topics"
);
ESClient
.
getInstance
().
createTopics
(
topicsToCreate
);
}
}
public
void
run
()
{
public
void
run
()
{
...
...
settings.gradle
View file @
80948d67
include
':ebclibrary'
,
':testapp'
,
':ebcagent'
,
':ebcutils'
,
':exampleapp'
,
':ebcmessageapp'
include
':ebclibrary'
,
':testapp'
,
':ebcutils'
,
':exampleapp'
,
':ebcmessageapp'
testapp/src/main/java/org/mpisws/testapp/SimulationClient.java
0 → 100644
View file @
80948d67
package
org.mpisws.testapp
;
import
android.content.Context
;
import
android.net.nsd.NsdManager
;
import
android.net.nsd.NsdServiceInfo
;
import
android.util.Log
;
import
java.io.BufferedReader
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.io.ObjectOutputStream
;
import
java.io.OutputStream
;
import
java.io.PrintWriter
;
import
java.net.InetAddress
;
import
java.net.Socket
;
import
static
org
.
mpisws
.
encounters
.
encounterformation
.
simulator
.
SimulatorEncounterFormationCore
.
mSharedSecrets
;
import
static
org
.
mpisws
.
encounters
.
encounterformation
.
simulator
.
SimulatorEncounterFormationCore
.
otherDHNonces
;
import
static
org
.
mpisws
.
encounters
.
encounterformation
.
simulator
.
SimulatorEncounterFormationCore
.
otherDHPubKeys
;
public
class
SimulationClient
{
static
private
String
TAG
=
SimulationClient
.
class
.
getSimpleName
();
static
private
String
mServiceName
=
"EbCSimulator"
;
static
private
String
mServiceType
=
"_ebcsimulator._tcp"
;
private
NsdManager
.
DiscoveryListener
mDiscoveryListener
;
private
NsdManager
mNsdManager
;
private
NsdManager
.
ResolveListener
mResolveListener
;
private
NsdServiceInfo
mService
;
private
InetAddress
mHost
;
private
int
mPort
;
private
Socket
sock
=
null
;
SimulationClient
(
Context
context
)
{
mNsdManager
=
(
NsdManager
)
context
.
getSystemService
(
Context
.
NSD_SERVICE
);
}
public
void
sendDataToSimulationServer
()
{
initializeDiscoveryListener
();
initializeResolveListener
();
mNsdManager
.
discoverServices
(
mServiceType
,
NsdManager
.
PROTOCOL_DNS_SD
,
mDiscoveryListener
);
}
public
void
initializeDiscoveryListener
()
{
// Instantiate a new DiscoveryListener
mDiscoveryListener
=
new
NsdManager
.
DiscoveryListener
()
{
// Called as soon as service discovery begins.
@Override
public
void
onDiscoveryStarted
(
String
regType
)
{
Log
.
d
(
TAG
,
"Service discovery started"
);
}
@Override
public
void
onServiceFound
(
NsdServiceInfo
service
)
{
// A service was found! Do something with it.
Log
.
d
(
TAG
,
"Service discovery success"
+
service
);
if
(!
service
.
getServiceType
().
equals
(
mServiceType
))
{
// Service type is the string containing the protocol and
// transport layer for this service.
Log
.
d
(
TAG
,
"Unknown Service Type: "
+
service
.
getServiceType
());
}
else
if
(
service
.
getServiceName
().
contains
(
"EbCSimulator"
)){
mNsdManager
.
resolveService
(
service
,
mResolveListener
);
}
}
@Override
public
void
onServiceLost
(
NsdServiceInfo
service
)
{
// When the network service is no longer available.
// Internal bookkeeping code goes here.
Log
.
e
(
TAG
,
"service lost"
+
service
);
}
@Override
public
void
onDiscoveryStopped
(
String
serviceType
)
{
Log
.
i
(
TAG
,
"Discovery stopped: "
+
serviceType
);
}
@Override
public
void
onStartDiscoveryFailed
(
String
serviceType
,
int
errorCode
)
{
Log
.
e
(
TAG
,
"Discovery failed: Error code:"
+
errorCode
);
mNsdManager
.
stopServiceDiscovery
(
this
);
}
@Override
public
void
onStopDiscoveryFailed
(
String
serviceType
,
int
errorCode
)
{
Log
.
e
(
TAG
,
"Discovery failed: Error code:"
+
errorCode
);
mNsdManager
.
stopServiceDiscovery
(
this
);
}
};
}
public
void
initializeResolveListener
()
{
mResolveListener
=
new
NsdManager
.
ResolveListener
()
{
@Override
public
void
onResolveFailed
(
NsdServiceInfo
serviceInfo
,
int
errorCode
)
{
// Called when the resolve fails. Use the error code to debug.
Log
.
e
(
TAG
,
"Resolve failed"
+
errorCode
);
}
@Override
public
void
onServiceResolved
(
NsdServiceInfo
serviceInfo
)
{
Log
.
e
(
TAG
,
"Resolve Succeeded. "
+
serviceInfo
);
if
(
serviceInfo
.
getServiceName
().
equals
(
mServiceName
))
{
Log
.
d
(
TAG
,
"Same IP."
);
return
;
}
mService
=
serviceInfo
;
mPort
=
mService
.
getPort
();
mHost
=
mService
.
getHost
();
mNsdManager
.
stopServiceDiscovery
(
mDiscoveryListener
);
sendDHKeysOverSocket
();
}
};
}
public
void
sendDHKeysOverSocket
()
{
new
Thread
(()
->
{
try
{
sock
=
new
Socket
(
mHost
,
mPort
);
if
(
sock
==
null
)
return
;
String
serializedSecrets
;
String
serializedNonces
;
String
serializedPubKeys
;
// serialize
OutputStream
os
=
sock
.
getOutputStream
();
try
{
ByteArrayOutputStream
bo
=
new
ByteArrayOutputStream
();
ObjectOutputStream
so
=
new
ObjectOutputStream
(
bo
);
so
.
writeObject
(
mSharedSecrets
);
so
.
flush
();
serializedSecrets
=
bo
.
toString
();
so
.
writeObject
(
otherDHNonces
);
so
.
flush
();
serializedNonces
=
bo
.
toString
();
so
.
writeObject
(
otherDHPubKeys
);
so
.
flush
();
serializedPubKeys
=
bo
.
toString
();
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
e
);
return
;
}
// write over socket
PrintWriter
pw
=
new
PrintWriter
(
os
,
true
);
pw
.
println
(
serializedSecrets
);
pw
.
println
(
serializedNonces
);
pw
.
println
(
serializedPubKeys
);
// wait for server to ack
BufferedReader
in
=
new
BufferedReader
(
new
InputStreamReader
(
sock
.
getInputStream
()));
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
{
Log
.
d
(
TAG
,
line
);
}
in
.
close
();
pw
.
close
();
sock
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}).
start
();
}
}
testapp/src/main/java/org/mpisws/testapp/SimulationServer.java
0 → 100644
View file @
80948d67
package
org.mpisws.testapp
;
import
android.content.Context
;
import
android.net.nsd.NsdManager
;
import
android.net.nsd.NsdServiceInfo
;
import
android.os.Handler
;
import
android.util.Log
;
import
org.apache.commons.lang3.tuple.ImmutablePair
;
import
org.apache.commons.lang3.tuple.Pair
;
import
org.mpisws.embeddedsocial.ESClient
;
import
org.mpisws.embeddedsocial.ESMessage
;
import
org.mpisws.helpers.Identifier
;
import
org.mpisws.helpers.Utils
;
import
org.mpisws.messaging.EpochLinkMessage
;
import
java.io.BufferedReader
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.io.ObjectInputStream
;
import
java.io.PrintStream
;
import
java.net.ServerSocket
;
import
java.net.Socket
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
org
.
mpisws
.
encounters
.
EncounterBasedCommunication
.
CHANGE_EPOCH_TIME
;
import
static
org
.
mpisws
.
encounters
.
encounterformation
.
simulator
.
SimulatorEncounterFormationCore
.
NUM_SIMULATED_DEVICES
;
import
static
org
.
mpisws
.
encounters
.
encounterformation
.
simulator
.
SimulatorEncounterFormationCore
.
NUM_SIMULATED_EPOCHS
;
import
static
org
.
mpisws
.
helpers
.
Utils
.
SHA1
;
public
class
SimulationServer
{
private
static
final
String
TAG
=
SimulationServer
.
class
.
getSimpleName
();
static
private
int
port
;
static
private
String
mServiceName
=
"EbCSimulator"
;
static
private
String
mServiceType
=
"_ebcsimulator._tcp"
;
private
int
currentEpoch
=
0
;
private
ServerSocket
mServerSocket
;
private
NsdManager
.
RegistrationListener
mRegistrationListener
;
private
NsdManager
mNsdManager
;
private
List
<
Identifier
>
nonces
;
private
List
<
Identifier
>
sharedSecrets
;
private
List
<
Identifier
>
pubKeys
;
SimulationServer
(
Context
context
)
{
mNsdManager
=
(
NsdManager
)
context
.
getSystemService
(
Context
.
NSD_SERVICE
);
}
public
void
startServer
()
{
new
Thread
(()
->
{
// Initialize a server socket on the next available port.
try
{
mServerSocket
=
new
ServerSocket
(
0
);
// Store the chosen port.
port
=
mServerSocket
.
getLocalPort
();
registerService
(
port
);
Socket
sock
=
mServerSocket
.
accept
();
BufferedReader
in
=
new
BufferedReader
(
new
InputStreamReader
(
sock
.
getInputStream
()));
List
<
String
>
lines
=
new
ArrayList
<>();
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
{
lines
.
add
(
line
);
}
PrintStream
output
=
new
PrintStream
(
sock
.
getOutputStream
());
output
.
println
(
"Finished"
);
Utils
.
myAssert
(
lines
.
size
()
==
3
);
sharedSecrets
=
deserializeIDList
(
lines
.
get
(
0
));
nonces
=
deserializeIDList
(
lines
.
get
(
1
));
pubKeys
=
deserializeIDList
(
lines
.
get
(
2
));
if
(
sharedSecrets
==
null
||
nonces
==
null
)
{
return
;
}
output
.
close
();
in
.
close
();
sock
.
close
();
processData
();
}
catch
(
ClassNotFoundException
|
IOException
e
)
{
e
.
printStackTrace
();
}
}).
start
();
}
private
void
processData
()
{
// Create all topics you'll ever have to create
List
<
Pair
<
Identifier
,
Identifier
>>
topicsToCreate
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
nonces
.
size
();
i
++)
{
topicsToCreate
.
add
(
new
ImmutablePair
<>(
nonces
.
get
(
i
),
pubKeys
.
get
(
i
)));
}
for
(
Identifier
ss
:
sharedSecrets
)
{
topicsToCreate
.
add
(
new
ImmutablePair
<>(
ss
,
ss
));
}
ESClient
.
getInstance
().
createTopics
(
topicsToCreate
);
// Every "epoch" or so try to post link messages to the prior "epoch" ss for each "device"
// Let's try and post to the prior 3 epochs
new
Handler
().
postDelayed
(()
->
{
int
lowEpoch
=
currentEpoch
>
3
?
currentEpoch
-
3
:
0
;
List
<
Identifier
>
sses
=
sharedSecrets
.
subList
(
lowEpoch
*
NUM_SIMULATED_DEVICES
,
currentEpoch
*
NUM_SIMULATED_DEVICES
);
List
<
String
>
topicHandles
=
ESClient
.
getInstance
().
getTopicHandles
(
sses
);
List
<
ESMessage
>
msgsToSend
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
NUM_SIMULATED_DEVICES
;
i
++)
{
for
(
int
j
=
currentEpoch
+
1
;
j
>
lowEpoch
+
1
;
j
--)
{
int
oldIndex
=
(
j
-
1
-
lowEpoch
)*
NUM_SIMULATED_DEVICES
+
i
;
int
newIndex
=
(
j
-
lowEpoch
)*
NUM_SIMULATED_DEVICES
+
i
;
if
(
topicHandles
.
get
(
oldIndex
)
==
null
||
topicHandles
.
get
(
oldIndex
).
compareTo
(
""
)
==
0
)
{
continue
;
}
EpochLinkMessage
epochLinkMessage
=
new
EpochLinkMessage
.
EpochLinkMessageBuilder
()
.
addOldNonce
(
nonces
.
get
((
lowEpoch
*
NUM_SIMULATED_DEVICES
)
+
oldIndex
).
toString
())
.
addNewNonce
(
nonces
.
get
((
lowEpoch
*
NUM_SIMULATED_DEVICES
)
+
newIndex
).
toString
())
.
build
();
msgsToSend
.
add
(
new
ESMessage
(
epochLinkMessage
.
toSendMessageText
(
sses
.
get
(
oldIndex
).
getBytes
()),
new
Identifier
(
SHA1
(
sharedSecrets
.
get
(
i
).
getBytes
())).
toString
(),
topicHandles
.
get
(
oldIndex
),
true
,
null
,
true
,
-
1
));
}
}
ESClient
.
getInstance
().
sendMsgs
(
msgsToSend
);
currentEpoch
++;
// heh hack
if
(
currentEpoch
==
NUM_SIMULATED_EPOCHS
)
currentEpoch
--;
},
CHANGE_EPOCH_TIME
);
}
private
List
<
Identifier
>
deserializeIDList
(
String
serializedObject
)
throws
IOException
,
ClassNotFoundException
{
byte
b
[]
=
serializedObject
.
getBytes
();
ByteArrayInputStream
bi
=
new
ByteArrayInputStream
(
b
);
ObjectInputStream
si
=
new
ObjectInputStream
(
bi
);
List
<
Identifier
>
obj
=
(
List
<
Identifier
>)
si
.
readObject
();
return
obj
;
}
public
void
registerService
(
int
port
)
{
// Create the NsdServiceInfo object, and populate it.
NsdServiceInfo
serviceInfo
=
new
NsdServiceInfo
();
// The name is subject to change based on conflicts
// with other services advertised on the same network.
serviceInfo
.
setServiceName
(
mServiceName
);
serviceInfo
.
setServiceType
(
mServiceType
);
serviceInfo
.
setPort
(
port
);
initializeRegistrationListener
();
mNsdManager
.
registerService
(
serviceInfo
,
NsdManager
.
PROTOCOL_DNS_SD
,
mRegistrationListener
);
}
public
void
initializeRegistrationListener
()
{
mRegistrationListener
=
new
NsdManager
.
RegistrationListener
()
{
@Override
public
void
onServiceRegistered
(
NsdServiceInfo
NsdServiceInfo
)
{
// Save the service name. Android may have changed it in order to
// resolve a conflict, so update the name you initially requested
// with the name Android actually used.
mServiceName
=
NsdServiceInfo
.
getServiceName
();
Log
.
d
(
TAG
,
"Registration success "
+
mServiceName
);
}
@Override
public
void
onRegistrationFailed
(
NsdServiceInfo
serviceInfo
,
int
errorCode
)
{
Log
.
d
(
TAG
,
"Registration failed "
+
errorCode
);
}
@Override
public
void
onServiceUnregistered
(
NsdServiceInfo
arg0
)
{
// Service has been unregistered. This only happens when you call
// NsdManager.unregisterService() and pass in this listener.
}
@Override
public
void
onUnregistrationFailed
(
NsdServiceInfo
serviceInfo
,
int
errorCode
)
{
// Unregistration failed. Put debugging code here to determine why.
}
};
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment