var checksum=false;
var seqnumenabled = false;
var onlyack = false;
var seqnum = 0;
var rtd30 = false;
var seqnumold = seqnum;
var tcp = false;
function send(){
delay();
checksum = $("#checksum").is(":checked");
seqnumenabled = $("#seqnum").is(":checked");
onlyack = $("#onlyack").is(":checked");
rtd30 = $("#rtd30").is(":checked");;
tcp = $("#tcp").is(":checked");;
if(!checksum)
return tabloyaekle($("#datawillsend").val(),"==>",recieve());
else{
if(seqnumenabled){
if(onlyack){
if(rtd30){
if(tcp){
var recieved = recieve();
var crecieved = checksummed(recieved);
var sended = $("#datawillsend").val();
var csended = checksummed(sended);
if(kayboldumu()){
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","=[KAYIP]>","");
setTimeout(send,$("#time").val());
}else{
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
seqnumold = seqnum;
sendACKforTCP(csended==crecieved)
setTimeout(function () {
if(seqnumold == seqnum)
send();
},$("#time").val());
}
}
else{
var recieved = recieve();
var crecieved = checksummed(recieved);
var sended = $("#datawillsend").val();
var csended = checksummed(sended);
if(kayboldumu()){
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","=[KAYIP]>","");
setTimeout(send,$("#time").val());
}else{
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
seqnumold = seqnum;
sendACKwithCS2withLoss(csended==crecieved)
setTimeout(function () {
if(seqnumold == seqnum)
send();
},$("#time").val());
}
}
}else{
var recieved = recieve();
var crecieved = checksummed(recieved);
var sended = $("#datawillsend").val();
var csended = checksummed(sended);
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
seqnumold = seqnum;
sendACKwithCS2(csended==crecieved);
setTimeout(function () {
if(seqnumold == seqnum)
send();
},$("#time").val());
}
}else{
var recieved = recieve();
var crecieved = checksummed(recieved);
var sended = $("#datawillsend").val();
var csended = checksummed(sended);
tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
if(csended==crecieved){
sendACKwithCS();
}else{
sendNACKwithCS();
}
}
}else{
var recieved = recieve();
var crecieved = checksummed(recieved);
var sended = $("#datawillsend").val();
var csended = checksummed(sended);
tabloyaekle(sended+"("+csended+")" , " ==>" , recieved+"("+csended+"/"+crecieved+")");
if(csended==crecieved){
sendACK();
}else{
sendNACK();
}
}
}
}
function sendACK(){
delay();
if(bozuldumu()){
tabloyaekle("?NACK?"," <== ","ACK");
send();
return tabloyaekle("","","! HATA : duplikasyon tespit edildi ?");
}
else
return tabloyaekle("ACK"," <== ","ACK") + tabloyaekle("","BiTTi","");
}
function sendNACK(){
delay();
if(bozuldumu()){
tabloyaekle("?ACK?"," <== ","NACK");
return tabloyaekle("","","! HATA : istenen veri alınamadı ?");
}
else
return tabloyaekle("NACK"," <== ","NACK");
return send();
}
function sendACKwithCS(){
delay();
if(bozuldumu()){
if(checksumdogrumu()){
tabloyaekle("NACK (A)"," <== ","ACK (A)");
tabloyaekle("checksum eşleşmedi"," ","");
tabloyaekle("","","! DÜZELTİLDİ : duplikasyon tespit edildi?");
send();
}else{
tabloyaekle("NACK (N)"," <== ","ACK (A)");
send();
}
}else{
tabloyaekle("ACK (A)"," <== ","ACK (A)");
seqnum++;
tabloyaekle("","BiTTi","");
}
}
function sendNACKwithCS(){
if(bozuldumu()){
if(checksumdogrumu()){
tabloyaekle("ACK (N)"," <== ","NACK (N)");
tabloyaekle("checksum eşleşmedi"," ","");
send();
}else{
tabloyaekle("ACK (A)"," <== ","NACK (N)");
seqnum++;
return tabloyaekle("","","! HATA : istenen veri alınamadı ?");
}
}else{
tabloyaekle("NACK (N)"," <== ","NACK (N)");
send();
}
}
function sendACKwithCS2(checksum){
delay();
if(bozuldumu()){
{
tabloyaekle("["+seqnum+"] ACK (N)"," <== ","["+seqnum+"] ACK (A)");
tabloyaekle("checksum eşleşmedi"," ","");
send();
tabloyaekle("","","! DÜZELTİLDİ : duplikasyon tespit edildi ?");
}
}else{
if(checksum){
tabloyaekle("["+seqnum+"] ACK (A)"," <== ","["+seqnum+"] ACK (A)");
seqnum++;
tabloyaekle("","BiTTi","");
}
}
}
function sendACKwithCS2withLoss(checksum){
delay();
if(kayboldumu()){
tabloyaekle(""," <[KAYIP]= ","["+seqnum+"] ACK");
}else{
sendACKwithCS2(checksum);
}
}
function sendACKforTCP(checksum){
delay();
if(kayboldumu()){
tabloyaekle(""," <[KAYIP]= ","["+seqnum+"] ACK");
}else{
if(bozuldumu()){
{
if(checksum) {
tabloyaekle("[" + seqnum + "] ACK (N)", " <== ", "[" + seqnum + "] ACK (A)");
tabloyaekle("checksum eşleşmedi", " ", "");
send();
}
}
}else{
if(checksum){
tabloyaekle("["+seqnum+"] ACK (A)"," <== ","["+seqnum+"] ACK (A)");
seqnum+=$("#datawillsend").val().length;
tabloyaekle("","BiTTi","");
}
}
}
}
function checksummed(t){
var csum = 0;
for(var i= 0;i<t.length;i++){
if(t[i]=="1") csum++;
}
return csum;
}
function recieve(){
var t = $("#datawillsend").val();
for(var i= 0;i<t.length;i++){
if(bozuldumu()){
if(t[i]=="0") t = t.replaceAt(i, "1");
else t = t.replaceAt(i, "0");;
}
}
return t;
}
function bozuldumu(){
return Math.random()*100<parseInt($("#bozulma").val());
}
function kayboldumu(){
return Math.random()*100<parseInt($("#kayip").val());
}
function checksumdogrumu(){
return Math.random()*100<50;
}
function tabloyaekle(a,b,c){
$("#tablo").append("<tr><td>"+Date.now().toTime()+"</td></td><td>"+a+"</td><td>"+b+"</td><td>"+c+"</td></tr>");
}
function temizle(){
$("#tablo").html("<tr><th>GÖNDEREN</th><th>ARA</th><th>ALAN</th></tr>");
seqnum = 0;
}
String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
}
Number.prototype.toTime = function(){
return Math.floor(this%3600000/60000)+":"+ Math.floor(this%60000/1000) + ':' + this%1000
};
function delay(){
sleep(parseInt($("#thr").val()));
}
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
} |