int main(int argc, char **argv) { Aria::init(); //ArLog::init(ArLog::StdOut, ArLog::Verbose); ArClientBase client; ArArgumentParser parser(&argc, argv); ArClientSimpleConnector clientConnector(&parser); parser.loadDefaultArguments(); if (!clientConnector.parseArgs() || !parser.checkHelpAndWarnUnparsed()) { clientConnector.logOptions(); exit(0); } if (parser.getArgc() < 4 || parser.getArgc() > 6) { printf("usage: %s <x> <y> <th> <optional:xyspread> <optional:thspread>", argv[0]); exit(1); } if (!clientConnector.connectClient(&client)) { if (client.wasRejected()) printf("Server '%s' rejected connection, exiting\n", client.getHost()); else printf("Could not connect to server '%s', exiting\n", client.getHost()); exit(1); } client.runAsync(); ArNetPacket sending; // put in the arguments (you can see what they are from doing -lcl on clientDemo) sending.byte4ToBuf(atoi(parser.getArg(1))); sending.byte4ToBuf(atoi(parser.getArg(2))); sending.byte4ToBuf(atoi(parser.getArg(3))); if (parser.getArgc() > 4) sending.uByte4ToBuf(atoi(parser.getArg(4))); if (parser.getArgc() > 5) sending.uByte4ToBuf(atoi(parser.getArg(5))); // send the packet client.requestOnce("localizeToPose", &sending); // you have to give the client some time to send the command ArUtil::sleep(500); Aria::shutdown(); return 0; }
AREXPORT void ArServerInfoDrawings::netGetDrawingList(ArServerClient *client, ArNetPacket *packet) { ArNetPacket sendingPacket; // TODO: Any need to protect the map by a mutex? for (std::map<std::string, ArDrawingData *, ArStrCaseCmpOp>::iterator it = myDrawingDatas.begin(); it != myDrawingDatas.end(); it++) { sendingPacket.empty(); sendingPacket.strToBuf((*it).first.c_str()); sendingPacket.strToBuf((*it).second->getShape()); sendingPacket.byte4ToBuf((*it).second->getPrimaryColor().colorToByte4()); sendingPacket.byte4ToBuf((*it).second->getSize()); sendingPacket.byte4ToBuf((*it).second->getLayer()); sendingPacket.uByte4ToBuf((*it).second->getDefaultRefreshTime()); sendingPacket.byte4ToBuf((*it).second->getSecondaryColor().colorToByte4()); sendingPacket.strToBuf((*it).second->getVisibility()); client->sendPacketTcp(&sendingPacket); } // end for each drawing sendingPacket.empty(); client->sendPacketTcp(&sendingPacket); }
AREXPORT void ArServerHandlerCommMonitor::handleGetHeartbeatInterval (ArServerClient *client, ArNetPacket *packet) { if (client == NULL) { return; // Something very bad has happened... } ArNetPacket sendPacket; sendPacket.uByte4ToBuf(myHeartbeatInterval); client->sendPacketTcp(&sendPacket); } // end method handleGetHeartbeatInterval
AREXPORT void ArServerInfoDrawings::netListDrawings(ArServerClient *client, ArNetPacket *packet) { ArNetPacket sendingPacket; std::map<std::string, ArDrawingData *, ArStrCaseCmpOp>::iterator it; sendingPacket.byte4ToBuf(myDrawingDatas.size()); for (it = myDrawingDatas.begin(); it != myDrawingDatas.end(); it++) { sendingPacket.strToBuf((*it).first.c_str()); sendingPacket.strToBuf((*it).second->getShape()); sendingPacket.byte4ToBuf((*it).second->getPrimaryColor().colorToByte4()); sendingPacket.byte4ToBuf((*it).second->getSize()); sendingPacket.byte4ToBuf((*it).second->getLayer()); sendingPacket.uByte4ToBuf((*it).second->getDefaultRefreshTime()); sendingPacket.byte4ToBuf((*it).second->getSecondaryColor().colorToByte4()); } client->sendPacketTcp(&sendingPacket); }
AREXPORT ArServerClient::ArServerClient( ArSocket *tcpSocket, unsigned int udpPort, long authKey, long introKey, ArRetFunctor2<bool, ArNetPacket *, struct sockaddr_in *> *sendUdpCallback, std::map<unsigned int, ArServerData *> *dataMap, const char *passwordKey, const char *serverKey, const ArServerUserInfo *userInfo, int rejecting, const char *rejectingString, bool debugLogging, const char *serverClientName, bool logPasswordFailureVerbosely, bool allowSlowPackets, bool allowIdlePackets) : myProcessPacketCB(this, &ArServerClient::processPacket, NULL, true) { ArNetPacket packet; // set our default to no command pushCommand(0); myAuthKey = authKey; myIntroKey = introKey; myTcpSocket.transfer(tcpSocket); myTcpSocket.setCloseCallback(tcpSocket->getCloseCallback()); myTcpSocket.setNonBlock(); myTcpReceiver.setSocket(&myTcpSocket); myTcpReceiver.setProcessPacketCB(&myProcessPacketCB); myTcpSender.setSocket(&myTcpSocket); mySendUdpCB = sendUdpCallback; myDataMap = dataMap; if (udpPort == 0) myTcpOnly = true; else myTcpOnly = false; mySentTcpOnly = myTcpOnly; myUserInfo = userInfo; myPasswordKey = passwordKey; myServerKey = serverKey; myRejecting = rejecting; if (rejectingString != NULL) myRejectingString = rejectingString; myDebugLogging = debugLogging; if (myDebugLogging) myVerboseLogLevel = ArLog::Normal; else myVerboseLogLevel = ArLog::Verbose; myTcpSender.setDebugLogging(myDebugLogging); myLogPrefix = serverClientName; myLogPrefix += ": "; myTcpSender.setLoggingPrefix(myLogPrefix.c_str()); myTcpReceiver.setLoggingPrefix(myLogPrefix.c_str()); myLogPasswordFailureVerbosely = logPasswordFailureVerbosely; mySlowPacketsMutex.setLogName("ArServerClient::mySlowPacketsMutex"); myIdlePacketsMutex.setLogName("ArServerClient::myIdlePacketsMutex"); myAllowSlowPackets = allowSlowPackets; myAllowIdlePackets = allowIdlePackets; setIdentifier(ArServerClientIdentifier()); internalSwitchState(STATE_SENT_INTRO); packet.empty(); packet.setCommand(ArServerCommands::INTRODUCTION); packet.strToBuf("alpha"); packet.uByte2ToBuf(udpPort); packet.uByte4ToBuf(myAuthKey); packet.uByte4ToBuf(myIntroKey); packet.strToBuf(myPasswordKey.c_str()); sendPacketTcp(&packet); mySlowIdleThread = NULL; myHaveSlowPackets = false; myHaveIdlePackets = false; myCreationTime.setToNow(); resetTracking(); }
void putFile(char *fileName, char *asFileName) { ArNetPacket sendPacket; size_t ui; size_t len; FILE *file; if ((file = ArUtil::fopen(fileName, "r")) == NULL) { ArLog::log(ArLog::Normal, "putFile: can't open file '%s'", fileName); return; } // tell the server we're sending sendPacket.empty(); sendPacket.uByte2ToBuf(0); sendPacket.strToBuf(asFileName); client.requestOnce("putFile", &sendPacket); printf("Starting send of file %s\n", fileName); char buf[30000]; size_t ret; // now send the file while ((ret = fread(buf, 1, sizeof(buf), file)) == sizeof(buf)) { sendPacket.empty(); sendPacket.uByte2ToBuf(1); sendPacket.strToBuf(asFileName); sendPacket.uByte4ToBuf(ret); sendPacket.dataToBuf(buf, ret); client.requestOnce("putFile", &sendPacket); printf("Sent packet with %d\n", ret); } if (ferror(file)) { ArLog::log(ArLog::Normal, "ArServerFileToClient: Error sending file %s", fileName); sendPacket.empty(); sendPacket.uByte2ToBuf(3); sendPacket.strToBuf(asFileName); client.requestOnce("putFile", &sendPacket); return; } sendPacket.empty(); sendPacket.uByte2ToBuf(1); sendPacket.strToBuf(asFileName); sendPacket.uByte4ToBuf(ret); sendPacket.dataToBuf(buf, ret); client.requestOnce("putFile", &sendPacket); printf("Sent packet with %d\n", ret); sendPacket.empty(); sendPacket.uByte2ToBuf(2); sendPacket.strToBuf(asFileName); client.requestOnce("putFile", &sendPacket); if (feof(file)) { ArLog::log(ArLog::Normal, "ArServerFileToClient: Sent file %s", fileName); } fclose(file); }