Class: Network

Inherits:
Object
  • Object
show all
Defined in:
lib/software_challenge_client/network.rb

Overview

This class handles the socket connection to the server

Author:

  • Ralf-Tobias Diekert

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(host, port, board, client, reservation = nil) ⇒ Network

Returns a new instance of Network.



27
28
29
30
31
32
33
34
35
36
# File 'lib/software_challenge_client/network.rb', line 27

def initialize(host, port, board, client, reservation = nil)
  @host, @port, @connected, @board, @client =
    host, port, false, board, client

  @protocol = Protocol.new(self, @client)
  @reservationID = reservation || ''
  @receiveBuffer = ''

  puts '> Network/Socket created.'
end

Instance Attribute Details

#connectedBoolean (readonly)

Returns true, if the client is connected to a server.

Returns:

  • (Boolean)

    true, if the client is connected to a server



25
26
27
# File 'lib/software_challenge_client/network.rb', line 25

def connected
  @connected
end

Instance Method Details

#connectBoolean

connects the client with a given server

Returns:

  • (Boolean)

    true, if successfully connected to the server



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/software_challenge_client/network.rb', line 41

def connect
  @socket = TCPSocket.open(@host, @port)
  @connected = true

  self.sendString('<protocol>')
  if @reservationID != ''
    document = REXML::Document.new
    element = REXML::Element.new('joinPrepared')
    element.add_attribute('reservationCode', @reservationID)
    document.add(element)
    self.sendXML(document)
  else
    document = REXML::Document.new
    element = REXML::Element.new('join')
    element.add_attribute('gameType', 'swc_2016_twixt')
    document.add(element)
    self.sendXML(document)
  end
  return @connected
end

#disconnectObject

disconnects the client from a server



63
64
65
66
67
68
69
70
71
# File 'lib/software_challenge_client/network.rb', line 63

def disconnect

  if @connected
    sendString("</protocol>")
    @connected = false
    @socket.close
  end
  puts '> Disconnected.'
end

#emptyReceiveBufferObject

empties the receive buffer



112
113
114
# File 'lib/software_challenge_client/network.rb', line 112

def emptyReceiveBuffer
  @receiveBuffer = ''
end

#processMessagesBoolean

processes an incomming message

Returns:

  • (Boolean)

    true, if the processing of a incomming message was successfull



119
120
121
122
123
124
# File 'lib/software_challenge_client/network.rb', line 119

def processMessages
  if !@connected
    return false
  end
  return self.readString
end

#readStringObject

reads from the socket until “</room>” is read



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/software_challenge_client/network.rb', line 74

def readString
  puts 'reading'
  sockMsg = ''
  if(!@connected)
    return
  end

  line =''
  char = ''
  while line!="</room>"
    char = @socket.getc
    line+=char
    if char=='\n' || char==' '

      line = ''
    end
    sockMsg += char
  end
  puts 'ended reading'
  if sockMsg != ''

    @receiveBuffer.concat(sockMsg)

    # Remove <protocol> tag
    @receiveBuffer = @receiveBuffer.gsub('<protocol>', '')

    puts 'Receive:'
    puts ''
    #puts @receiveBuffer

    # Process text
    @protocol.processString('<msg>'+@receiveBuffer+'</msg>');
    self.emptyReceiveBuffer
  end
  return true
end

#sendString(s) ⇒ Object

sends a string to the socket

Parameters:

  • s (String)

    the message, to be sent



129
130
131
132
133
134
135
136
# File 'lib/software_challenge_client/network.rb', line 129

def sendString(s)
  if(@connected)
    @socket.print(s);
    puts 'Send:'
    puts ''
    puts(s);
  end
end

#sendXML(xml) ⇒ Object

sends a xml Document to the buffer

Parameters:

  • xml (REXML::Docuent)

    the Document, that will be sent



141
142
143
144
145
# File 'lib/software_challenge_client/network.rb', line 141

def sendXML(xml)
  text  = ''
  xml.write(text)
  self.sendString(text);
end