public string Read(NetMessage msg) { bool encoded = msg.ReadBoolean(); int idx = (int)msg.Read7BitEncodedUInt(); string retval; if (!encoded) { // insert into table retval = msg.ReadString(); while (m_data.Count <= idx) { m_data.Add(null); // dummy values } m_data[idx] = retval; return(retval); } // look in table if (m_data.Count <= idx) { return(null); } return(m_data[idx]); }
public static NetServerInfo DecodeResponse(NetMessage msg, IPEndPoint ep) { if (msg == null) { throw new ArgumentNullException("msg"); } NetServerInfo info = new NetServerInfo(); info.NumConnected = msg.ReadUInt16(); info.MaxConnections = msg.ReadUInt16(); info.ServerName = msg.ReadString(); info.RemoteEndpoint = ep; return(info); }
public string Read(NetMessage msg) { bool encoded = msg.ReadBoolean(); int idx = (int)msg.Read7BitEncodedUInt(); string retval; if (!encoded) { // insert into table retval = msg.ReadString(); while(m_data.Count <= idx) m_data.Add(null); // dummy values m_data[idx] = retval; return retval; } // look in table if (m_data.Count <= idx) return null; return m_data[idx]; }
internal override void HandlePacket(NetBuffer buffer, int bytesReceived, IPEndPoint senderEndpoint) { double now = NetTime.Now; NetConnection sender = FindConnection(senderEndpoint); if (sender != null) { sender.m_lastHeardFromRemote = now; if (sender.m_encryption.SymmetricEncryptionKeyBytes != null) { bool ok = sender.m_encryption.DecryptSymmetric(buffer); if (!ok) { Log.Warning("Failed to decrypt packet from client " + sender); return; } } } try { NetMessage response; int messagesReceived = 0; int usrMessagesReceived = 0; int ackMessagesReceived = 0; while (buffer.ReadBitsLeft > 7) { NetMessage msg = NetMessage.Decode(buffer); if (msg == null) { break; // done } messagesReceived++; msg.Sender = sender; switch (msg.m_type) { case NetMessageType.Acknowledge: case NetMessageType.AcknowledgeBitField: if (sender == null) { Log.Warning("Received Ack from not-connected source!"); } else { //Log.Debug("Received ack " + msg.SequenceChannel + "|" + msg.SequenceNumber); sender.ReceiveAcknowledge(msg); ackMessagesReceived++; } break; case NetMessageType.Handshake: NetHandshakeType tp = (NetHandshakeType)msg.ReadByte(); if (tp == NetHandshakeType.ConnectResponse) { Log.Warning("Received ConnectResponse?!"); } else if (tp == NetHandshakeType.Connect) { if (sender == null) { NetHandshake.HandleConnect(msg, this, senderEndpoint); } else { // resend response NetHandshake.SendConnectResponse(this, sender, senderEndpoint); Log.Verbose("Redundant Connect received; resending response"); } } else if (tp == NetHandshakeType.ConnectionEstablished) { if (sender == null) { Log.Warning("Received ConnectionEstablished, but no sender connection?!"); } else { float rt = (float)(now - sender.m_firstSentHandshake); sender.m_ping.Initialize(rt); ushort remoteValue = msg.ReadUInt16(); sender.RemoteClockOffset = NetTime.CalculateOffset(now, remoteValue, rt); Log.Verbose("Reinitializing remote clock offset to " + sender.RemoteClockOffset + " ms (roundtrip " + NetUtil.SecToMil(rt) + " ms)"); if (sender.Status == NetConnectionStatus.Connected) { Log.Verbose("Redundant ConnectionEstablished received"); } else { Log.Debug("Connection established"); sender.SetStatus(NetConnectionStatus.Connected, "Connected by established"); } } } else { // disconnected if (sender == null) { Log.Warning("Disconnected received from unconnected source: " + senderEndpoint); return; } string reason = msg.ReadString(); sender.Disconnected(reason); } break; case NetMessageType.Discovery: Log.Debug("Answering discovery response from " + senderEndpoint); response = NetDiscovery.EncodeResponse(this); SendSingleMessageAtOnce(response, null, senderEndpoint); break; case NetMessageType.PingPong: if (sender == null) { return; } bool isPong = msg.ReadBoolean(); bool isOptimizeInfo = msg.ReadBoolean(); if (isOptimizeInfo) { // DON'T handle optimizeinfo... only clients should adapt to server ping info } else if (isPong) { if (sender.Status == NetConnectionStatus.Connected) { sender.m_ping.HandlePong(now, msg); } } else { NetPing.ReplyPong(msg, sender); // send pong } break; case NetMessageType.User: case NetMessageType.UserFragmented: usrMessagesReceived++; if (sender == null) { Log.Warning("User message received from unconnected source: " + senderEndpoint); return; // don't handle user messages from unconnected sources } if (sender.Status == NetConnectionStatus.Connecting) { sender.SetStatus(NetConnectionStatus.Connected, "Connected by user message"); } sender.ReceiveMessage(now, msg); break; default: Log.Warning("Bad message type: " + msg); break; } } if (sender != null) { NetStatistics stats = sender.Statistics; stats.PacketsReceived++; stats.MessagesReceived += messagesReceived; stats.UserMessagesReceived += usrMessagesReceived; stats.AckMessagesReceived += ackMessagesReceived; stats.BytesReceived += bytesReceived; } } catch (Exception ex) { Log.Error("Failed to parse packet correctly; read/write mismatch? " + ex); } }
public void ServerHandleMSG(NetMessage msg) { string str = msg.ReadString(); MovePlayer(str); }
public void ClientHandleMSG(NetMessage msg) { string str = msg.ReadString(); if (str.StartsWith("P")) { RecievedGameState(str); } }
private void HandleMessage(NetMessage msg) { string str = msg.ReadString(); string[] tab = str.Split(':'); for (int i = 0; i < OpCodes.Length; i++) { if (tab[0] == OpCodes[i].OpCode) { String Disconnect = ""; m_log.Info(OpCodes[i].OpCode); if (OpCodes[i].Funct(tab, msg, ref Disconnect) == false) msg.Sender.Disconnect(Disconnect); } } m_log.Info(str); }
public static NetServerInfo DecodeResponse(NetMessage msg, IPEndPoint ep) { if (msg == null) throw new ArgumentNullException("msg"); NetServerInfo info = new NetServerInfo(); info.NumConnected = msg.ReadUInt16(); info.MaxConnections = msg.ReadUInt16(); info.ServerName = msg.ReadString(); info.RemoteEndpoint = ep; return info; }
void HandleMessage(NetMessage msg) { string str = msg.ReadString(); string[] tab = str.Split(':'); NetPlayer pltmp = GetPlayer(msg.Sender); Console.WriteLine("Client:" + str); //if (HaveDeconnection == true) //{ // RemoveDeconnectedPlayer(); // HaveDeconnection = false; //} for (int i = 0; i < OpCodes.Length; i++) { if (tab[0] == OpCodes[i].OpCode) { String Disconnect = ""; m_log.Info(OpCodes[i].OpCode); if (OpCodes[i].Funct(pltmp, tab, msg, ref Disconnect) == false) { msg.Sender.Disconnect(Disconnect); HaveDeconnection = true; } } } }