Skip to content
Snippets Groups Projects
Commit 2ba32fe1 authored by Tom Feng's avatar Tom Feng
Browse files

Merge branch 'intermediate' into 'kernel3'

Intermediate merge to k3

See merge request !3
parents 651da759 bb309fe3
Branches backup727
No related tags found
2 merge requests!16Withtime,!3Intermediate merge to k3
......@@ -46,24 +46,22 @@ int InsertTo(HT* Table, int Tid, char* Str, int Len){
if(Table->TidSequence[h1]!=-1 && Table->TidSequence[index2]!=-1)return HT_NOSLOT;
//bwprintf(COM2,"InsertTo: str: %s\n\r",Str);
if(Table->TidSequence[h1] == -1){
Table->TidSequence[h1] = Tid;
FakeAddr = FakeAddr+(h1*(NAME_LENGTH_MAX+1));
returnIndex = h1;
stringCopy((char *)FakeAddr,Str,Len);
bwprintf(COM2,"InsertTo: index %d, fakeaddr %d, string: %s\n\r",returnIndex,FakeAddr, (char *)FakeAddr);
}else if(Table->TidSequence[index2] == -1){
returnIndex = index2;
Table->TidSequence[index2] = Tid;
FakeAddr = FakeAddr+((index2)*(NAME_LENGTH_MAX+1));
stringCopy((char *)FakeAddr,Str,Len);
bwprintf(COM2,"InsertTo: index %d, fakeaddr %d, string: %s\n\r",returnIndex, FakeAddr,(char *)FakeAddr);
}else{
// if both filled, overwrite h1
returnIndex = h1;
}
Table->TidSequence[returnIndex] = Tid;
FakeAddr = FakeAddr+((index2)*(NAME_LENGTH_MAX+1));
stringCopy((char *)FakeAddr,Str,Len);
//bwprintf(COM2,"InsertTo: index %d, fakeaddr %d, string: %s\n\r",returnIndex, FakeAddr,(char *)FakeAddr);
return returnIndex;
}
int Lookup(HT* Table,char* Str, int Len){
bwprintf(COM2,"Lookup: Str: %s\n\r",Str);
//bwprintf(COM2,"Lookup: Str: %s\n\r",Str);
int h1,h2;
//bwprintf(COM2,"Hash: before hash\n\r");
Hash(Table,Str,Len,&h1,&h2);
......@@ -71,7 +69,7 @@ int Lookup(HT* Table,char* Str, int Len){
FakeAddr +=(h1 *(NAME_LENGTH_MAX + 1));
//bwprintf(COM2,"Hash: after hash, h1: %d, addr2: %d\n\r",h1,((char *)(FakeAddr)));
int result = stringCompare((char *)(FakeAddr),Str);
bwprintf(COM2,"lookup: index %d, fakeaddr %d, string: %d\n\r",h1, FakeAddr,(char *)FakeAddr);
//bwprintf(COM2,"lookup: index %d, fakeaddr %d, string: %d\n\r",h1, FakeAddr,(char *)FakeAddr);
int index2 = (h1+h2)%(Table->size);
//bwprintf(COM2,"Hash: after compare, result: %d\n\r",result);
if(result==0){
......@@ -80,7 +78,7 @@ int Lookup(HT* Table,char* Str, int Len){
FakeAddr = (int)(Table->NameSequence);
FakeAddr = ((index2)*(NAME_LENGTH_MAX+1));
result = stringCompare((char *)FakeAddr,Str);
bwprintf(COM2,"Lookup: index %d, fakeaddr %d, string: %d\n\r",index2, FakeAddr,(char *)FakeAddr);
//bwprintf(COM2,"Lookup: index %d, fakeaddr %d, string: %d\n\r",index2, FakeAddr,(char *)FakeAddr);
if(result == 0) return (Table->TidSequence)[index2];
}
return -1;
......
......@@ -13,30 +13,30 @@ int doSend(KernelStruct* Colonel, int TaskID, void* Msg, int MsgLen, void* Reply
Buffer** AllSendQ = Colonel->AllSendQ;
// check the TD availability
int TIDIndex = GetMemoryIndexINT(TaskID);
bwprintf(COM2,"doSend: TID: %d, TID Index:%d\n\r",TaskID, TIDIndex);
//bwprintf(COM2,"doSend: TID: %d, TID Index:%d\n\r",TaskID, TIDIndex);
TD* SenderTask = Colonel->Active;
if(TIDIndex >= MAX_NUM_TD){
bwprintf(COM2,"doSend: TID Index:%d out of MaxNumTD\n\r", TIDIndex);
//bwprintf(COM2,"doSend: TID Index:%d out of MaxNumTD\n\r", TIDIndex);
SenderTask->RetVal = TASK_DNE;
return FAILURE;
}
TD* ReceiverTask = &(Colonel->Tasks[TIDIndex]);
if(GetAvailability(ReceiverTask)){
bwprintf(COM2,"doSend: Task %d Availability %d\n\r",TaskID, GetAvailability(ReceiverTask));
//bwprintf(COM2,"doSend: Task %d Availability %d\n\r",TaskID, GetAvailability(ReceiverTask));
SenderTask->RetVal = TASK_DNE;
return FAILURE;
}
bwprintf(COM2,"doSend: Task %d SendMsgLen:%d\n\r",SenderTask->TaskID,MsgLen);
//bwprintf(COM2,"doSend: Task %d SendMsgLen:%d\n\r",SenderTask->TaskID,MsgLen);
int Result;
if (ReceiverTask->TaskState == SendBlocked) {
AP* Args = ReceiverTask->Args;
int *ReceiverSlot = (int *)Args->arg1;
int ReceiverLen = (int)(Args->arg2);
bwprintf(COM2,"doSend: Receiver %d SendBlocked\n\r", TaskID);
//bwprintf(COM2,"doSend: Receiver %d SendBlocked\n\r", TaskID);
Result = byteCopy(ReceiverSlot, Msg, ReceiverLen, MsgLen);
if (Result == FAILURE){
bwprintf(COM2,"doSend: byteCopy Failed\n\r");
//bwprintf(COM2,"doSend: byteCopy Failed\n\r");
ReceiverTask->RetVal = MSG_TRUNCATED;
return Result;
}
......@@ -46,11 +46,11 @@ int doSend(KernelStruct* Colonel, int TaskID, void* Msg, int MsgLen, void* Reply
BufferPopHead(AllSendQ[TIDIndex]);
}
else {
bwprintf(COM2,"doSend: Receiver %d not Received, Task %d RBLocked\n\r",TaskID,SenderTask->TaskID);
//bwprintf(COM2,"doSend: Receiver %d not Received, Task %d RBLocked\n\r",TaskID,SenderTask->TaskID);
SenderTask->TaskState = ReceiveBlocked;
bwprintf(COM2,"doSend: inside k2\n\r");
//bwprintf(COM2,"doSend: add Task(%d) to SendQ[%d]\n\r",SenderTask->TaskID,TIDIndex);
FeedBuffer(AllSendQ[TIDIndex],(void *)(SenderTask->TaskID));
bwprintf(COM2,"doSend: Guess 4, after feed buffer\n\r");
//bwprintf(COM2,"doSend: Guess 4, after feed buffer\n\r");
}
Colonel->Active = NULL;
return SUCCESS;
......@@ -83,7 +83,7 @@ int doReceive(KernelStruct* Colonel, int TaskID, void* Msg, int MsgLen) {
SenderTask->TaskState = ReplyBlocked;
//bwprintf(COM2,"doReceive: Sender%d Reply Blocked\n\r",TaskID);
Result = BufferPopHead(AllSendQ[GetMemoryIndexINT(ReceiverTask->TaskID)]);
//bwprintf(COM2,"doReceive: BufferPopHead %d\n\r");
//bwprintf(COM2,"doReceive: SendQ[%d] popped head\n\r",(ReceiverTask->TaskID));
Colonel->Active->RetVal = MsgLen;
}
return SUCCESS;
......@@ -94,7 +94,7 @@ int doReply(KernelStruct* Colonel, int TaskID, void* ReplyMsg, int ReplyLen) {
int TIDIndex = GetMemoryIndexINT(TaskID);
TD* SenderTask = &(Colonel->Tasks[TIDIndex]);
if(TIDIndex >= MAX_NUM_TD){
bwprintf(COM2,"doReply: TID:%d invalid \n\r", TIDIndex);
//bwprintf(COM2,"doReply: TID:%d invalid \n\r", TIDIndex);
SenderTask->RetVal = TASK_DNE;
return FAILURE;
}
......@@ -109,14 +109,14 @@ int doReply(KernelStruct* Colonel, int TaskID, void* ReplyMsg, int ReplyLen) {
void* SenderReply = Args->arg3;
int SenderLen = (int)Args->arg4;
if(SenderTask->TaskState != ReplyBlocked){
bwprintf(COM2,"doReply: Sender is not in ReplyBlocked state\n\r");
//bwprintf(COM2,"doReply: Sender is not in ReplyBlocked state\n\r");
Colonel->Active->RetVal = SRR_FAILED;
return FAILURE;
}
Result = byteCopy(SenderReply, ReplyMsg, SenderLen, ReplyLen);
if(Result != SUCCESS){
bwprintf(COM2,"doReply: MSG_TRUNCATED\n\r");
//bwprintf(COM2,"doReply: MSG_TRUNCATED\n\r");
SenderTask->RetVal = MSG_TRUNCATED;
return Result;
}
......
......@@ -39,7 +39,7 @@ void firstUserTaskChildren() {
Args1.arg1 = (void *)(&RPSClient2);
int RPSClient2ID = Create(&Args1);
bwprintf(COM2,"RPSServer %d, C1 %d, C2 %d\n\r",RPSServerID, RPSClient1ID, RPSClient2ID);
//bwprintf(COM2,"RPSServer %d, C1 %d, C2 %d\n\r",RPSServerID, RPSClient1ID, RPSClient2ID);
bwprintf(COM2, "FirstUserTask: exiting\n\r");
Exit();
......
......@@ -10,76 +10,75 @@
extern Buffer*** TotalSendQ;
void NameServer(){
int TIDSeq[HASH_SIZE];
int i = 0;
for(;i<HASH_SIZE;i++){
TIDSeq[i] = -1;
}
char Names[HASH_SIZE*(NAME_LENGTH_MAX+1)];
// set up send q
int MyID = MyTid();
int MyIndex = GetMemoryIndexINT(MyID);
Buffer** AllSendQ = GetAllSendQ();
bwprintf(COM2,"NS Index %d\n\r",MyIndex);
bwprintf(COM2,"NS AllSendQ add%d\n\r",AllSendQ);
Buffer SendQ;
int QStorage[MAX_NUM_TD];
SendQ.Storage = (void *)QStorage;
SendQ.Size = MAX_NUM_TD;
SendQ.Length = 0;
SendQ.Head = 0;
SendQ.Tail = 0;
AllSendQ[MyIndex] = &SendQ;
bwprintf(COM2,"SendQ Setup\n\r");
// initialize Names
for(i=0;i<HASH_SIZE;i++){
Names[i*(NAME_LENGTH_MAX+1)-1] = 0;
}
HT HashTable;
HashTable.TidSequence = TIDSeq;
HashTable.NameSequence = Names;
HashTable.size = HASH_SIZE;
bwprintf(COM2,"HashTable Setup\n\r");
// some sort of while loop to receive and reply
int TaskToReceive;
NSReq ReceiveSlot;
int Result;
int StrLen;
FOREVER{
TaskToReceive = NULL;
BufferFIFO(&SendQ,(void *)&TaskToReceive);
bwprintf(COM2,"NS_LOOP: Got %d from SendQ\n\r",TaskToReceive);
if(TaskToReceive != NULL){
Result = Receive(TaskToReceive,(void*) &ReceiveSlot, sizeof(NSReq));
bwprintf(COM2,"NS_LOOP:Task %d Receive Result: %d\n\r",TaskToReceive,Result);
bwprintf(COM2,"NS_LOOP: Msg:%s\n\r",ReceiveSlot.Msg);
StrLen = stringLen(ReceiveSlot.Msg);
//bwprintf(COM2,"NS_LOOP:after string length function\n\r");
if(ReceiveSlot.MsgType == WhoIS){
//bwprintf(COM2,"NS_LOOP: msg type == %d\n\r",ReceiveSlot.MsgType);
//bwprintf(COM2,"NS_LOOP: before hash look up, Sender: %d\n\r",TaskToReceive);
Result = Lookup(&HashTable, ReceiveSlot.Msg,StrLen);
//bwprintf(COM2,"NS_LOOP: hash look up result %d\n\r",Result);
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}else if(ReceiveSlot.MsgType == RegAS){
Result = InsertTo(&HashTable,ReceiveSlot.TaskID, ReceiveSlot.Msg,StrLen);
bwprintf(COM2,"NS_USR: Inserted to %d, %d, %s\n\r",Result, &(Names[Result*17]),(Names + (Result * 17)));
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}
}
else{
bwprintf(COM2,"NS has no sender, pass\n\r");
Pass();
}
}
int TIDSeq[HASH_SIZE];
int i = 0;
for(;i<HASH_SIZE;i++){
TIDSeq[i] = -1;
}
char Names[HASH_SIZE*(NAME_LENGTH_MAX+1)];
// set up send q
int MyID = MyTid();
int MyIndex = GetMemoryIndexINT(MyID);
Buffer** AllSendQ = GetAllSendQ();
//bwprintf(COM2,"NS Index %d\n\r",MyIndex);
// bwprintf(COM2,"NS AllSendQ add%d\n\r",AllSendQ);
Buffer SendQ;
int QStorage[MAX_NUM_TD];
SendQ.Storage = (void *)QStorage;
SendQ.Size = MAX_NUM_TD;
SendQ.Length = 0;
SendQ.Head = 0;
SendQ.Tail = 0;
AllSendQ[MyIndex] = &SendQ;
//bwprintf(COM2,"SendQ Setup\n\r");
// initialize Names
for(i=0;i<HASH_SIZE;i++){
Names[i*(NAME_LENGTH_MAX+1)-1] = 0;
}
HT HashTable;
HashTable.TidSequence = TIDSeq;
HashTable.NameSequence = Names;
HashTable.size = HASH_SIZE;
//bwprintf(COM2,"HashTable Setup\n\r");
// some sort of while loop to receive and reply
int TaskToReceive;
NSReq ReceiveSlot;
int Result;
int StrLen;
FOREVER{
TaskToReceive = NULL;
BufferFIFO(&SendQ,(void *)&TaskToReceive);
//bwprintf(COM2,"NS_LOOP: Got %d from SendQ\n\r",TaskToReceive);
if(TaskToReceive != NULL){
Result = Receive(TaskToReceive,(void*) &ReceiveSlot, sizeof(NSReq));
//bwprintf(COM2,"NS_LOOP:Task %d Receive Result: %d\n\r",TaskToReceive,Result);
//bwprintf(COM2,"NS_LOOP: Msg:%s\n\r",ReceiveSlot.Msg);
StrLen = stringLen(ReceiveSlot.Msg) + 1;
//bwprintf(COM2,"NS_LOOP:after string length function\n\r");
if(ReceiveSlot.MsgType == WhoIS){
//bwprintf(COM2,"NS_LOOP: msg type == %d\n\r",ReceiveSlot.MsgType);
//bwprintf(COM2,"NS_LOOP: before hash look up, Sender: %d\n\r",TaskToReceive);
Result = Lookup(&HashTable, ReceiveSlot.Msg,StrLen);
//bwprintf(COM2,"NS_LOOP: hash look up result %d\n\r",Result);
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}else if(ReceiveSlot.MsgType == RegAS){
Result = InsertTo(&HashTable,ReceiveSlot.TaskID, ReceiveSlot.Msg,StrLen);
//bwprintf(COM2,"NS_USR: Inserted to %d, %d, %s\n\r",Result, &(Names[Result*17]),(Names + (Result * 17)));
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}
}else{
//bwprintf(COM2,"NS has no sender, pass\n\r");
Pass();
}
}
}
int ActualWhoIS(AP* Args){
......@@ -90,26 +89,26 @@ int ActualWhoIS(AP* Args){
}
int WhoIs(char* Name) {
NSReq SendReq;
int ReplyTID;
int Status;
AP Args;
stringCopy(SendReq.Msg, Name, NS_MESSAGE_MAX_LENGTH);
bwprintf(COM2,"WhoIs: Name: %s, SendReq.Msg: %s\n\r",Name, SendReq.Msg);
SendReq.MsgType = WhoIS;
bwprintf(COM2,"WhoIs: MsgType: %d\n\r",SendReq.MsgType);
Args.arg1 = (void *)(&SendReq);
Args.arg2 = (void *)sizeof(NSReq);
Args.arg3 = (void *)(&ReplyTID);
Args.arg4 = (void *)sizeof(int);
bwprintf(COM2,"NS_USR: WhoIs %s\n\r",Name);
Status = ActualWhoIS(&Args);
if (Status == sizeof(int)) return ReplyTID;
return NAMESERVER_TID_INVALID;
NSReq SendReq;
int ReplyTID;
int Status;
AP Args;
stringCopy(SendReq.Msg, Name, NS_MESSAGE_MAX_LENGTH);
//bwprintf(COM2,"WhoIs: Name: %s, SendReq.Msg: %s\n\r",Name, SendReq.Msg);
SendReq.MsgType = WhoIS;
//bwprintf(COM2,"WhoIs: MsgType: %d\n\r",SendReq.MsgType);
Args.arg1 = (void *)(&SendReq);
Args.arg2 = (void *)sizeof(NSReq);
Args.arg3 = (void *)(&ReplyTID);
Args.arg4 = (void *)sizeof(int);
//bwprintf(COM2,"NS_USR: WhoIs %s\n\r",Name);
Status = ActualWhoIS(&Args);
if (Status == sizeof(int)) return ReplyTID;
return NAMESERVER_TID_INVALID;
}
int ActualRegAS(AP* Args){
asm volatile ("swi 10\n\t");
......@@ -119,25 +118,25 @@ int ActualRegAS(AP* Args){
}
int RegisterAs (char* Name) {
NSReq SendReq;
int Result;
int Status;
AP Args;
SendReq.TaskID = MyTid();
stringCopy(SendReq.Msg, Name, NS_MESSAGE_MAX_LENGTH);
SendReq.MsgType = RegAS;
bwprintf(COM2,"RegAS: MsgType %d\n\r",RegAS);
Args.arg1 = (void *)(&SendReq);
Args.arg2 = (void *)sizeof(NSReq);
Args.arg3 = (void *)(&Result);
Args.arg4 = (void *)sizeof(int);
bwprintf(COM2,"NS_USR: registering %s\n\r",Name);
Status = ActualRegAS(&Args);
if (Status == sizeof(int)) return Result;
return NAMESERVER_TID_INVALID;
}
NSReq SendReq;
int Result;
int Status;
AP Args;
SendReq.TaskID = MyTid();
stringCopy(SendReq.Msg, Name, NS_MESSAGE_MAX_LENGTH);
SendReq.MsgType = RegAS;
//bwprintf(COM2,"RegAS: MsgType %d\n\r",RegAS);
Args.arg1 = (void *)(&SendReq);
Args.arg2 = (void *)sizeof(NSReq);
Args.arg3 = (void *)(&Result);
Args.arg4 = (void *)sizeof(int);
//bwprintf(COM2,"NS_USR: registering %s\n\r",Name);
Status = ActualRegAS(&Args);
if (Status == sizeof(int)) return Result;
return NAMESERVER_TID_INVALID;
}
\ No newline at end of file
......@@ -13,19 +13,19 @@ void GamePlay(RPSChoice Client1Move, RPSChoice Client2Move,RPSMsg* reply, int Cl
int Diff = (int) Client1Move - (int)Client2Move;
if (Diff == 0) {
reply->Msg = Draw;
bwprintf(COM2, "We have a Draw.");
bwprintf(COM2, "We have a Draw.\n\r");
Reply(Client1, (void *)reply, sizeof(RPSMsg));
Reply(Client2, (void *)reply, sizeof(RPSMsg));
}
else if (Diff == 1 || Diff == -2) {
bwprintf(COM2, "Client1 Wins.");
bwprintf(COM2, "Client(%d) Wins.\n\r",Client1);
reply->Msg = Win;
Reply(Client1, (void *)reply, sizeof(RPSMsg));
reply->Msg = Lose;
Reply(Client2, (void *)reply, sizeof(RPSMsg));
}
else {
bwprintf(COM2, "Client2 Wins.");
bwprintf(COM2, "Client(%d) Wins.\n\r",Client2);
reply->Msg = Lose;
Reply(Client1, (void *)reply, sizeof(RPSMsg));
reply->Msg = Win;
......@@ -38,13 +38,12 @@ int RPSServer(){
char Name[] = "RPSServer";
// register to name server
bwprintf(COM2,"%s: Before Register\n\r",Name);
int Result = RegisterAs(Name);
if(Result == FAILURE) {
bwprintf(COM2, "%s: Cannot register %s????\n\r",Name,Name);
bwprintf(COM2, "%s: Cannot register! %s\n\r",Name,Name);
return FAILURE;
}
bwprintf(COM2,"%s: Registered Successfully!!!\n\r",Name);
bwprintf(COM2,"%s: Successfully Regiseterd!\n\r",Name);
// setup send q
......@@ -66,38 +65,44 @@ int RPSServer(){
//bwprintf(COM2,"%s: SendQ Addr %d\n\r",Name,&SendQ);
AllSendQ[MyIndex] = &SendQ;// problem
//bwprintf(COM2,"%s: SendQ setup\n\r",Name);
int TaskID, Client1, Client2;
int TaskID;
int Client1 = -1;
int Client2 = -1;
RPSMsg ReceiveMsg, ReplyMsg;
RPSChoice Client1Move = None, Client2Move = None;
Pass();
int bOtherQuit = 0;
TaskID = 0;
//bwprintf(COM2,"%s: Before Loop\n\r",Name);
FOREVER {
TaskID = NULL;
Result = BufferFIFO(&SendQ,(void *)&TaskID);
bwprintf(COM2,"%s: Got Task %d from SendQ\n\r",Name,TaskID);
if(TaskID != NULL){
bwprintf(COM2,"%s: Got into If\n\r",Name);
Result = Receive(TaskID, &ReceiveMsg, sizeof(ReceiveMsg));
if(bOtherQuit != 0){
bwprintf(COM2,"%s: other player quit\n\r",Name);
ReplyMsg.Msg = OtherQuit;
Reply(TaskID, &ReplyMsg, sizeof(ReplyMsg));
}else{
switch (ReceiveMsg.Msg) {
case Quit:
bwprintf(COM2,"%s: Player with tid(%d) quit\n\r",Name, TaskID);
ReplyMsg.Msg = Bye;
Reply(TaskID,&ReplyMsg,sizeof(ReplyMsg));
// xor Client1 with TaskID, if same, result 0, then set to 0
Client1 = (Client1 ^ TaskID)? Client1: 0;
Client2 = (Client2 ^ TaskID)? Client2: 0;
bOtherQuit = ((Client2 == Client1) &&(Client1 == 0))? 0:1;
break;
case SignUp:
if (Client1 == 0 && Client2 != Client1) Client1 = TaskID;
else Client2 = TaskID;
bwprintf(COM2,"%s: Player with tid(%d) signed up\n\r",Name,TaskID);
if(Client1 == -1){
Client1 = TaskID;
}else{
Client2 = TaskID;
}
ReplyMsg.Msg = LetsPlay;
Reply(TaskID, &ReplyMsg, sizeof(ReplyMsg));
break;
......@@ -105,14 +110,18 @@ int RPSServer(){
case Play:
// only one player
if (Client1 == 0 || Client2 == 0) {
Client2Move = (Client1 == 0)? ReceiveMsg.Choice: None;
Client1Move = (Client2 == 0)? ReceiveMsg.Choice: None;
ReplyMsg.Msg = OnePlayer;
Reply(TaskID, &ReplyMsg, sizeof(ReplyMsg));
break;
}
if (Client1 == TaskID) Client1Move = ReceiveMsg.Choice;
else Client2Move = ReceiveMsg.Choice;
GamePlay(Client1Move, Client2Move, &ReplyMsg, Client1, Client2);
Client1Move = Client2Move = None;
Client1Move = (Client1 == TaskID)? ReceiveMsg.Choice: Client1Move;
Client2Move = (Client2 == TaskID)? ReceiveMsg.Choice: Client2Move;
if((Client1Move != None) && (Client2Move != None)){
GamePlay(Client1Move, Client2Move, &ReplyMsg, Client1, Client2);
Client1Move = Client2Move = None;
}
break;
default:
......@@ -120,7 +129,6 @@ int RPSServer(){
}
}
}else{
bwprintf(COM2,"%s: Before Pass\n\r",Name);
Pass();
}
}
......@@ -141,63 +149,60 @@ int Player(int ID){
RPSMsg SendMsg, ReplyMsg;
MyTID = MyTid();
ServerTID = WhoIs("RPSServer\0");
bwprintf(COM2, "%s: Got server tid, %d\n\r",Name,ServerTID);
ServerTID = WhoIs("RPSServer");
if (ServerTID < 0) return FAILURE;
bwprintf(COM2,"%s:Ready To Signup\n\r",Name);
SendMsg.Msg = SignUp;
Result = Send(ServerTID, &SendMsg, sizeof(RPSMsg), &ReplyMsg, sizeof(RPSMsg));
if (Result != sizeof(ReplyMsg)) {
//bwprintf(COM2, "Sign Up Request to Server did not go through.");
bwprintf(COM2, "Sign Up Request to Server did not go through.");
return Result;
}
//if (ReplyMsg.MsgType == ServerFull) //TODOTODOTODOTODO
bwprintf(COM2, "%s with TaskID(%d) is about to Play\n\r", Name, MyTID);
FOREVER {
bwprintf(COM2, "Please enter r/R for Rock, p/P for Paper, s/S for Scissors.\n\r");
while (Input = bwgetc(COM2)) {
bwputc(COM2,Input);
if (Input == 'r' || Input == 'R') {
SendMsg.Choice = Rock;
break;
}
else if (Input == 'p' || Input == 'P') {
SendMsg.Choice = Paper;
break;
}
else if (Input == 's' || Input == 'S') {
SendMsg.Choice = Scissors;
break;
}else if(Input == 'q' || Input == 'Q'){
SendMsg.Msg = Quit;
}
else {
Input = 'U';
bwprintf(COM2, "Please enter r/R for Rock, p/P for Paper, s/S for Scissors.\n\r");
}
SendMsg.Choice = Rock;
break;
}
SendMsg.Msg = Play;
Result = Send(ServerTID, &SendMsg, sizeof(SendMsg), &ReplyMsg, sizeof(ReplyMsg));
if (Result != sizeof(ReplyMsg)) {
if(SendMsg.Msg == Quit){
bwprintf(COM2, "Request for QUIT from %s did not go through gracefully.", Name);
}else{
bwprintf(COM2, "%s: Game obstructed!",Name);
}
return FAILURE;
else if (Input == 'p' || Input == 'P') {
SendMsg.Choice = Paper;
break;
}
else if (Input == 's' || Input == 'S') {
SendMsg.Choice = Scissors;
break;
}else if(Input == 'q' || Input == 'Q'){
SendMsg.Msg = Quit;
}
else {
Input = 'U';
bwprintf(COM2, "Please enter r/R for Rock, p/P for Paper, s/S for Scissors.\n\r");
}
}
SendMsg.Msg = Play;
Result = Send(ServerTID, &SendMsg, sizeof(SendMsg), &ReplyMsg, sizeof(ReplyMsg));
if (Result != sizeof(ReplyMsg)) {
if(SendMsg.Msg == Quit){
bwprintf(COM2, "Request for QUIT from %s did not go through gracefully.", Name);
}else{
if(SendMsg.Msg == Quit){
bwprintf(COM2, "%s exitting...",Name);
Result = ReplyMsg.Msg;
}
bwprintf(COM2, "%s: Game obstructed!",Name);
}
return FAILURE;
}else{
if(SendMsg.Msg == Quit){
bwprintf(COM2, "%s exitting...",Name);
Result = ReplyMsg.Msg;
break;
}
}
}
return SUCCESS;
}
......
......@@ -38,7 +38,7 @@ TD* getNextTaskScheduler (KernelStruct* Colonel) {
Len --;
}
if(Task != First){
bwprintf(COM2,"scheduler: picked Task%d, state:%d\n\r",Task->TaskID,Task->TaskState);
//bwprintf(COM2,"scheduler: picked Task%d, state:%d\n\r",Task->TaskID,Task->TaskState);
return Task;
}
}
......
......@@ -87,6 +87,8 @@ void handlerRecordNS(KernelStruct* Colonel){
void handlerWhoISRegAs(KernelStruct* Colonel){
AP* Args = Colonel->Active->Args;
//bwprintf(COM2,"handlerWhoIsRegas: Message :%s\n\r",((NSReq *)(Args->arg1))->Msg);
//bwprintf(COM2,"handlerWhoIsRegas: MsgType:%d\n\r",((NSReq *)(Args->arg1))->MsgType);
int result = doSend(Colonel,Colonel->NameServerID,Args->arg1,(int)Args->arg2,Args->arg3,(int)Args->arg4);
}
......@@ -176,4 +178,4 @@ int Activate(KernelStruct *Colonel,TD* Task) {
// bwprintf(COM2,"Back to activate, SWI=%d\n\r", SWI);
return SWI;
//return r0;
}
}
\ No newline at end of file
......@@ -48,19 +48,19 @@ int ActualSend(AP* Args){
// tid is that of the one its sending to
int Send (int TaskID, void* Msg, int MsgLen, void* Reply, int ReplyLen) {
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = Msg;
bwprintf(COM2,"Send_USR: Msg: %d\n\r",Msg);
Args.arg2 = (void *)(MsgLen);
Args.arg3 = Reply;
Args.arg4 = (void *)(ReplyLen);
int MyID = MyTid();
bwprintf(COM2,"Send: Task %d send MsgLen %d\n\r",TaskID,MsgLen);
int Return = ActualSend(&Args);
return Return;
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = Msg;
//bwprintf(COM2,"Send_USR: Msg: %d\n\r",Msg);
Args.arg2 = (void *)(MsgLen);
Args.arg3 = Reply;
Args.arg4 = (void *)(ReplyLen);
int MyID = MyTid();
//bwprintf(COM2,"Send: Task %d send MsgLen %d\n\r",TaskID,MsgLen);
int Return = ActualSend(&Args);
return Return;
}
int ActualReceive(AP* Args){
......@@ -71,13 +71,13 @@ int ActualReceive(AP* Args){
}
int Receive (int TaskID, void* Msg, int MsgLen) {
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = (void *)(Msg);
Args.arg2 = (void *)(MsgLen);
bwprintf(COM2,"Receive_USR: TaskID%d, Msglen%d\n\r",TaskID,MsgLen);
int Return = ActualReceive(&Args);
return Return;
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = (void *)(Msg);
Args.arg2 = (void *)(MsgLen);
//bwprintf(COM2,"Receive_USR: TaskID%d, Msglen%d\n\r",TaskID,MsgLen);
int Return = ActualReceive(&Args);
return Return;
}
int ActualReplay(AP* Args){
......@@ -121,4 +121,4 @@ int AwaitEvent(int EventID) {
register int RetVal asm("r0");
int Return = RetVal;
return Return;
}
}
\ No newline at end of file
......@@ -22,8 +22,11 @@ int stringCopy(char* Dest, const char* Src, int Length) {
// Reference: http://clc-wiki.net/wiki/C_standard_library:string.h:strcmp
int stringCompare(const char* Str1, const char* Str2) {
//bwprintf(COM2,"StringComp: str1:%d,str2:%d\n\r",Str1,Str2);
while (*Str1 && (*Str1==*Str2))
while (*Str1 && (*Str1==*Str2)){
//bwprintf(COM2,"%c %c ",*Str1,*Str2);
Str1++,Str2++;
}
//bwprintf(COM2,"%c %c ",*Str1, *Str2);
return *(const unsigned char*)Str1-*(const unsigned char*)Str2;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment