void TFRnd::PutSIn(const PSIn& SIn, TCs& Cs){ int BfL=SIn->Len(); char* Bf=new char[BfL]; SIn->GetBf(Bf, BfL); Cs=TCs::GetCsFromBf(Bf, BfL); PutBf(Bf, BfL); delete[] Bf; }
void TSockSys::Send(const uint64& SockId, const PSIn& SIn) { // make sure it's a valid socket IAssert(IsSock(SockId)); uv_tcp_t* SockHnd = SockIdToHndH.GetDat(SockId); // create write request uv_write_req_t* WriteHnd = (uv_write_req_t*)malloc(sizeof(uv_write_req_t)); // copy the data in the buffer WriteHnd->Buffer.len = SIn->Len(); //TODO: handle cases when SIn doesn't have known Len() WriteHnd->Buffer.base = (char*)malloc(WriteHnd->Buffer.len); SIn->GetBf(WriteHnd->Buffer.base, WriteHnd->Buffer.len); // execute the request int ResCd = uv_write((uv_write_t*)WriteHnd, (uv_stream_t*)SockHnd, &WriteHnd->Buffer, 1, OnWrite); // check for errors if (ResCd != 0) { // cleanup first free(WriteHnd->Buffer.base); free(WriteHnd); // and throw exception throw TExcept::New("SockSys.Send: Error sending data: " + SockSys.GetLastErr()); } }