Newer
Older
void NameServer(){
int TIDSeq[HASH_SIZE];
char Names[HASH_SIZE][NAME_LENGTH_MAX+1];
// set up send q
int MyID = MyTid();
int MyIndex = GetMemoryIndex(MyID);
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;
// initialize Names
int i = 0;
for(;i<257;i++){
Names[i][NAME_LENGTH_MAX] = 0;
}
HT HashTable;
HashTable.TidSequence = TIDSeq;
HashTable.NameSequence = Names;
HashTable.size = HASH_SIZE;
Buffer SendQ;
int storage[MAX_NUM_BUFFER];
SendQ.Storage = (void *)(storage);
SendQ.size = MAX_NUM_BUFFER;
SendQ.Head = 0;
SendQ.Tail = 0;
SendQ.Length = 0;
// some sort of while loop to receive and reply
int TaskToReceive;
NSReq ReceiveSlot;
int Result;
int StrLen;
FOREVER{
TaskToReceive = -1;
BufferFIFO(SendQ,&TaskToReceive);
if(TaskToReceive != -1){
Receive(TaskToReceive,(void*) &ReceiveSlot, sizeof(NSReq));
StrLen = stringLen(ReceiveSlot->Msg);
if(ReceiveSlot.MsgType == WhoIs){
Result = Lookup(&HashTable, ReceiveSlot->Msg,StrLen));
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}else if(ReceiveSlot.MsgType == RegAs){
Result = InsertTo(&HashTable,ReceiveSlot->TaskID, ReceiveSlot->Msg,StrLen);
Reply(TaskToReceive,(void *)(&Result), sizeof(int));
}else{
Pass();
}
}
int ActualWhoIS(AP* Args){
asm volatile ("swi 9\n\t");
register int r0 asm ("r0");
int R = r0;
return R;
}
NSReq SendMsg;
int ReplyTID;
int Status;
AP Args;
SendMsg.MsgType = WhoIs;
stringCopy(SendMsg.Msg, Name, NS_MESSAGE_MAX_LENGTH);
Args.arg0 = (void *)(&SendMsg);
Args.arg1 = sizeof(NSReq);
Args.arg2 = (void *)(&ReplyTID);
Args.arg3 = sizeof(int);
Status = ActualWhoIS(&Args)
else return NAMESERVER_TID_INVALID;
}
int ActualRegAS(AP* Args){
asm volatile ("swi 10\n\t");
register int r0 asm ("r0");
int R = r0;
return R;
}
SendMsg.MsgType = RegisterAs;
stringCopy(SendMsg.Msg, Name, NS_MESSAGE_MAX_LENGTH);
Args.arg2 = (void *)(&Result);
Args.arg3 = sizeof(int);
Status = ActualRegAS(&Args);
else return NAMESERVER_TID_INVALID;