12.01.2014 Aufrufe

Dokumentation zum Massive Multiplayer Online Game - Universität ...

Dokumentation zum Massive Multiplayer Online Game - Universität ...

Dokumentation zum Massive Multiplayer Online Game - Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5. Spieler, Allianzen und Nachrichten<br />

61<br />

Implementierung<br />

Model<br />

Als erstes sollten die Beziehungen zwischen dem Sender, der Message und der (ggf. mehreren Empfängern)<br />

hergestellt werden.<br />

user.rb:<br />

has_many :messages_user<br />

has_many :messages, -> { select("`messages`.*, `messages_users`.`read` AS `read`,<br />

`messages_users`.`recipient_deleted` as `deleted`") },<br />

:through => :messages_user<br />

accepts_nested_attributes_for :messages_user<br />

has_many :sent_messages, :class_name => 'Message', :foreign_key => 'sender_id'<br />

message.rb:<br />

belongs_to :sender, :class_name => 'User', :foreign_key => 'sender_id'<br />

has_many :messages_users<br />

has_many :recipients, :class_name => 'User', :through => :messages_users, :source => :user<br />

messages_user.rb:<br />

belongs_to :message<br />

belongs_to :user<br />

Das Usermodel besitzt eine Hilfsmethode, mit welcher man die Anzahl der ungelesenen Nachrichten abrufen<br />

kann.<br />

def unread_messages<br />

count=0<br />

self.messages.each do |message|<br />

count+=1 unless message.read?<br />

end<br />

return count<br />

end<br />

Die Message besitzt zwei Hilfsmethoden:<br />

Damit der Spieler nicht auf Nachrichten zugreifen kann, die nicht von ihm selbst verfasst oder nicht an ihn<br />

gerichtet wurden, besitzt das Message Model folgende Methode, der zur Überprüfung ein User übergeben<br />

wird:<br />

def is_readable?(user)<br />

return false if user==nil<br />

return (user==self.sender or self.recipients.exists?(user)==1)<br />

end<br />

Sobald der Empfänger seine Nachricht gelesen/geöffnet hat, wird diese Relation in der messages_user Tabelle<br />

als "gelesen" markiert.<br />

def tag_msg_as_seen!(user)<br />

if(self.sender!=user)<br />

@entry=MessagesUser.all.where(:user_id=>user,:message_id=>self).first<br />

@entry.read=true<br />

@entry.save<br />

end<br />

end

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!