|
@@ -212,6 +212,10 @@ void Connection::SetScene(Scene* newScene)
|
|
|
scene_->StopAsyncLoading();
|
|
scene_->StopAsyncLoading();
|
|
|
SubscribeToEvent(scene_, E_ASYNCLOADFINISHED, ATOMIC_HANDLER(Connection, HandleAsyncLoadFinished));
|
|
SubscribeToEvent(scene_, E_ASYNCLOADFINISHED, ATOMIC_HANDLER(Connection, HandleAsyncLoadFinished));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // ATOMIC BEGIN
|
|
|
|
|
+ SubscribeToEvent(scene_, E_COMPONENTREMOVED, ATOMIC_HANDLER(Connection, HandleComponentRemoved));
|
|
|
|
|
+ // ATOMIC END
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void Connection::SetIdentity(const VariantMap& identity)
|
|
void Connection::SetIdentity(const VariantMap& identity)
|
|
@@ -450,6 +454,12 @@ bool Connection::ProcessMessage(int msgID, MemoryBuffer& msg)
|
|
|
ProcessPackageInfo(msgID, msg);
|
|
ProcessPackageInfo(msgID, msg);
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
|
|
+ // ATOMIC BEGIN
|
|
|
|
|
+ case MSG_STRING:
|
|
|
|
|
+ ProcessStringMessage(msgID, msg);
|
|
|
|
|
+ break;
|
|
|
|
|
+ // ATOMIC END
|
|
|
|
|
+
|
|
|
default:
|
|
default:
|
|
|
processed = false;
|
|
processed = false;
|
|
|
break;
|
|
break;
|
|
@@ -1104,6 +1114,29 @@ void Connection::ConfigureNetworkSimulator(int latencyMs, float packetLoss)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// ATOMIC BEGIN
|
|
|
|
|
+void Connection::HandleComponentRemoved(StringHash eventType, VariantMap& eventData)
|
|
|
|
|
+{
|
|
|
|
|
+ using namespace ComponentRemoved;
|
|
|
|
|
+
|
|
|
|
|
+ Component* comp = static_cast<Component*>(eventData[P_COMPONENT].GetPtr());
|
|
|
|
|
+ Node* node = static_cast<Node*>(eventData[P_NODE].GetPtr());
|
|
|
|
|
+
|
|
|
|
|
+ unsigned nodeId = node->GetID();
|
|
|
|
|
+ unsigned compId = comp->GetID();
|
|
|
|
|
+
|
|
|
|
|
+ if (sceneState_.nodeStates_.Contains(node->GetID()))
|
|
|
|
|
+ {
|
|
|
|
|
+ NodeReplicationState& nodeState = sceneState_.nodeStates_[node->GetID()];
|
|
|
|
|
+ if (nodeState.componentStates_.Contains(comp->GetID()))
|
|
|
|
|
+ {
|
|
|
|
|
+ ComponentReplicationState& compState = nodeState.componentStates_[comp->GetID()];
|
|
|
|
|
+ compState.component_ = NULL;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+// ATOMIC END
|
|
|
|
|
+
|
|
|
void Connection::HandleAsyncLoadFinished(StringHash eventType, VariantMap& eventData)
|
|
void Connection::HandleAsyncLoadFinished(StringHash eventType, VariantMap& eventData)
|
|
|
{
|
|
{
|
|
|
sceneLoaded_ = true;
|
|
sceneLoaded_ = true;
|
|
@@ -1558,4 +1591,50 @@ void Connection::ProcessPackageInfo(int msgID, MemoryBuffer& msg)
|
|
|
RequestNeededPackages(1, msg);
|
|
RequestNeededPackages(1, msg);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// ATOMIC BEGIN
|
|
|
|
|
+
|
|
|
|
|
+// Expose control methods for current controls
|
|
|
|
|
+void Connection::SetControlButtons(unsigned buttons, bool down)
|
|
|
|
|
+{
|
|
|
|
|
+ controls_.Set(buttons,down);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/// Check if a button is held down.
|
|
|
|
|
+bool Connection::IsControlButtonDown(unsigned button) const
|
|
|
|
|
+{
|
|
|
|
|
+ return (controls_.IsDown(button));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void Connection::SetControlDataInt(const String &key, int value)
|
|
|
|
|
+{
|
|
|
|
|
+ controls_.extraData_[key] = value;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int Connection::GetControlDataInt(const String &key)
|
|
|
|
|
+{
|
|
|
|
|
+ return controls_.extraData_[key].GetInt();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void Connection::SendStringMessage(const String& message)
|
|
|
|
|
+{
|
|
|
|
|
+ // Send the identity map now
|
|
|
|
|
+ VectorBuffer msg;
|
|
|
|
|
+ msg.WriteString(message);
|
|
|
|
|
+ SendMessage(MSG_STRING, true, true, msg);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void Connection::ProcessStringMessage(int msgID, MemoryBuffer &msg)
|
|
|
|
|
+{
|
|
|
|
|
+ using namespace NetworkMessage;
|
|
|
|
|
+
|
|
|
|
|
+ VariantMap &eventData = GetEventDataMap();
|
|
|
|
|
+ eventData[P_MESSAGEID] = (int) msgID;
|
|
|
|
|
+ eventData[P_CONNECTION] = this;
|
|
|
|
|
+ eventData[P_DATA] = msg.ReadString();
|
|
|
|
|
+ SendEvent(E_NETWORKSTRINGMESSAGE, eventData);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// ATOMIC END
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|