?? bttalker.java
字號(hào):
}
length = (buf[0] << 8 & 0xFF) | (buf[1] & 0xFF);
length = length - 2;
if (length < 0) {
System.out.println("Dropped adj len=" + length);
return;
}
byte tmp[] = new byte[length];
for (int i=0; i < length; i++) {
tmp[i] = buf[i+2];
}
synchronized (receiveDataStack) {
receiveDataStack.addElement(tmp);
receiveDataStack.notify();
}
tmp = null;
}
// Read a single byte, blocks if data not available
private byte read()
{
byte rc;
while (true)
{
if (receiveBuf != null)
{
rc = receiveBuf[receiveIndex++];
if (receiveIndex >= receiveBuf.length) {
receiveBuf = null;
}
return rc;
}
synchronized (receiveDataStack) {
while (receiveDataStack.size() == 0 )
{
try {
receiveDataStack.wait();
}
catch (InterruptedException e) {}
}
receiveBuf = (byte []) receiveDataStack.elementAt(0);
receiveDataStack.removeElementAt(0);
receiveIndex = 0;
}
}
}
public void remoteSendHello()
{
if( observer.getState() != observer.CONNECT )
return;
byte buf[] = new byte[1];
buf[0] = BTCMD_SAY_HELLO;
System.out.println("Sending: Hello message");
sendDataStack.addElement(buf);
sendDataIfNecessary();
buf = null;
}
public void remoteStart3DWorld()
{
if( observer.getState() != observer.CONNECT )
return;
byte buf[] = new byte[1];
buf[0] = BTCMD_START_3D_WORLD;
System.out.println("Sending: start 3D world");
sendDataStack.addElement(buf);
sendDataIfNecessary();
buf = null;
}
public void remoteSendReady()
{
if( observer.getState() != observer.CONNECT )
return;
byte buf[] = new byte[1];
buf[0] = BTCMD_READY_FOR_PLAY;
System.out.println("Sending: ready for play");
sendDataStack.addElement(buf);
sendDataIfNecessary();
amIReady = true;
// in case avatar build itself up already
if(avatarReady)
{
System.out.println("avatar already ready");
observer.startMultiRace();
}
buf = null;
System.gc();
}
private static byte mBufPosTab[] = new byte[29];
public void remoteUpdateSpeedAndPos(Vector3D aMyCarPos, int aAngZ,
Vector3D aMyCarSpeedVect,
boolean aSignalColision)
{
if( observer.getState() != observer.CONNECT )
return;
if(aSignalColision)
mBufPosTab[0] = BTCMD_COLISION_SIGNAL;
else
mBufPosTab[0] = BTCMD_UPDATE_SPEED_AND_POS;
int a, b, c, d, tmp = 0, iter = 0;
iter++;
for( int i=0; i<5; ++i)
{
switch(i) {
case 0 : tmp = aMyCarPos.x; break;
case 1 : tmp = aMyCarPos.y; break;
case 2 : tmp = aAngZ; break;
case 3 : tmp = aMyCarSpeedVect.x; break;
case 4 : tmp = aMyCarSpeedVect.y; break;
}
a = (tmp & 0xFF000000);
b = (tmp & 0x00FF0000);
c = (tmp & 0x0000FF00);
d = (tmp & 0x000000FF);
a = (a >> 24);
b = (b >> 16);
c = (c >> 8);
mBufPosTab[iter] = (byte)a; iter++;
mBufPosTab[iter] = (byte)b; iter++;
mBufPosTab[iter] = (byte)c; iter++;
mBufPosTab[iter] = (byte)d; iter++;
}
write(mBufPosTab, 0, 21);
sendTransmitBuf();
}
public void remoteSendColisionConfirm(Vector3D aMyCarPos, int aAngZ,
Vector3D aMyCarSpeedVect,
Vector3D aAvatarSpeedVect)
{
if( observer.getState() != observer.CONNECT )
return;
int a, b, c, d, tmp = 0, iter = 0;
mBufPosTab[0] = BTCMD_COLISION_CONFIRM;
iter++;
for( int i=0; i<7; ++i)
{
switch(i) {
case 0 : tmp = aMyCarPos.x; break;
case 1 : tmp = aMyCarPos.y; break;
case 2 : tmp = aAngZ; break;
case 3 : tmp = aMyCarSpeedVect.x; break;
case 4 : tmp = aMyCarSpeedVect.y; break;
case 5 : tmp = aAvatarSpeedVect.x; break;
case 6 : tmp = aAvatarSpeedVect.y; break;
}
a = (tmp & 0xFF000000);
b = (tmp & 0x00FF0000);
c = (tmp & 0x0000FF00);
d = (tmp & 0x000000FF);
a = (a >> 24);
b = (b >> 16);
c = (c >> 8);
mBufPosTab[iter] = (byte)a; iter++;
mBufPosTab[iter] = (byte)b; iter++;
mBufPosTab[iter] = (byte)c; iter++;
mBufPosTab[iter] = (byte)d; iter++;
}
write(mBufPosTab, 0, 29);
sendTransmitBuf();
}
public void remoteSendColisionNone(Vector3D aMyCarPos, int aAngZ, Vector3D aMyCarSpeedVect)
{
if( observer.getState() != observer.CONNECT )
return;
int a, b, c, d, tmp = 0, iter = 0;
mBufPosTab[0] = BTCMD_COLISION_NONE;
iter++;
for( int i=0; i<5; ++i)
{
switch(i) {
case 0 : tmp = aMyCarPos.x; break;
case 1 : tmp = aMyCarPos.y; break;
case 2 : tmp = aAngZ; break;
case 3 : tmp = aMyCarSpeedVect.x; break;
case 4 : tmp = aMyCarSpeedVect.y; break;
}
a = (tmp & 0xFF000000);
b = (tmp & 0x00FF0000);
c = (tmp & 0x0000FF00);
d = (tmp & 0x000000FF);
a = (a >> 24);
b = (b >> 16);
c = (c >> 8);
mBufPosTab[iter] = (byte)a; iter++;
mBufPosTab[iter] = (byte)b; iter++;
mBufPosTab[iter] = (byte)c; iter++;
mBufPosTab[iter] = (byte)d; iter++;
}
write(mBufPosTab, 0, 21);
sendTransmitBuf();
}
private void sendDataIfNecessary()
{
byte tmp[];
if( observer.getState() == observer.CONNECT )
{
try {
// Send Drawing messages to peer
while (sendDataStack.size() > 0)
{
tmp = (byte []) sendDataStack.elementAt(0);
write(tmp, 0, tmp.length);
sendDataStack.removeElementAt(0);
tmp = null;
}
flush();
}
catch (Exception e) {
System.out.println("ERROR BTTalker::sendDataIfNecessary(): " + e);
}
}
}
public void write(byte buf[], int offset, int length)
{
synchronized (transmitBuffer)
{
for (int i = 0; i < length; i++)
{
transmitBuffer[transmitIndex++] = buf[offset+i];
if( transmitIndex >= transmitBuffer.length )
sendTransmitBuf();
}
}
}
public void flush()
{
synchronized (transmitBuffer)
{
// If there is data to send, then send it!
if (transmitIndex > 2)
sendTransmitBuf();
}
}
private void sendTransmitBuf()
{
if(conn == null)
return;
try {
synchronized (transmitBuffer)
{
// Store the length in the first two bytes of the array
transmitBuffer[0] = (byte) (transmitIndex >> 8 & 0xFF);
transmitBuffer[1] = (byte) (transmitIndex & 0xFF);
conn.send(transmitBuffer);
transmitIndex = 2;
}
}
catch (IOException e) {
System.out.println("ERROR: conn.send: " + e);
}
}
public void stopBeingActive()
{
sendDataStack.removeAllElements();
mBtReceiver = null;
mBtReader = null;
System.gc();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -