// Fill out your copyright notice in the Description page of Project Settings. #include "CzsmActor.h" // Sets default values ACzsmActor::ACzsmActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; } // Called when the game starts or when spawned void ACzsmActor::BeginPlay() { Super::BeginPlay(); WORD version_request = MAKEWORD(2, 2); WSADATA sadata; WSAStartup(version_request, &sadata); sock = socket(PF_INET, SOCK_STREAM, 0); if (sock != INVALID_SOCKET) { UE_LOG(LogTemp, Warning, TEXT("SOCKET CREATE SUCCESS")); SOCKADDR_IN sock_add; memset(&sock_add, 0, sizeof(sock_add)); sock_add.sin_family = AF_INET; sock_add.sin_port = htons(8096); sock_add.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(sock, (PSOCKADDR)&sock_add, sizeof(sock_add)) != 0) { UE_LOG(LogTemp, Warning, TEXT("SOCKET CONNECT ERROR")); sock = INVALID_SOCKET; } else { UE_LOG(LogTemp, Warning, TEXT("SOCKET CONNECT SUCCESS")); } } else { UE_LOG(LogTemp, Warning, TEXT("SOCKET CREATE ERROR")); } } void ACzsmActor::EndPlay(const EEndPlayReason::Type EndPlayReason) { if (sock!=INVALID_SOCKET) { shutdown(sock, SD_BOTH); closesocket(sock); } WSACleanup(); } // Called every frame void ACzsmActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); char c[1]; c[0]= 'D'; char buf[256]; if (sock != INVALID_SOCKET) { //UE_LOG(LogTemp, Warning, TEXT("tick")); memset(buf, 0, sizeof(buf)); int sendnum=send(sock, c, sizeof(c), 0); //UE_LOG(LogTemp, Warning, TEXT("sendnum=%d"), sendnum); int recvnum = recv(sock, buf, (int)sizeof(buf), 0); if (recvnum > 0) { //UE_LOG(LogTemp, Warning, TEXT("recvnum=%d"), recvnum); FString fs = FString(ANSI_TO_TCHAR(buf)); //UE_LOG(LogTemp, Warning, TEXT("[%s]"),*fs); //-0.932, 7.785, 13.191, -0.01586, 0.06650, -0.11514, 0.99099, 0, 0, 0, 0, 0 FString word; FString rstr; int i = 0; int k1 = 0; int k2 = 0; int k3 = 0; float d[3]; float q[4]; int btn[5]; while (fs.Split(TEXT(","), &word, &rstr)) { if (i>=0 && i < 3) { d[k1] = FCString::Atof(*word); //UE_LOG(LogTemp, Warning, TEXT("d[%d]=%f"),k1,d[k1]); k1++; } if (i >= 3 && i < 7) { q[k2] = FCString::Atof(*word); //UE_LOG(LogTemp, Warning, TEXT("q[%d]=%f"), k2, q[k2]); k2++; } if (i >= 7 && i < 11) { btn[k3] = FCString::Atoi(*word); UE_LOG(LogTemp, Warning, TEXT("btn[%d]=%d"), k3, btn[k3]); k3++; if (k3 == 4) { btn[k3] = FCString::Atoi(*rstr); //UE_LOG(LogTemp, Warning, TEXT("btn[%d]=%d"), k3, btn[k3]); k3++; } } fs = rstr; i++; } FQuat fq(q[2], -q[0], -q[1], q[3]); this->SetActorRelativeRotation(fq); } } }