| 753 | { |
| 754 | DiagLogF("Warning: Format not found"); |
| 755 | } |
| 756 | return 0xFFFFFFFF; |
| 757 | } |
| 758 | |
| 759 | // create message |
| 760 | Ref<NetworkMessage> msg = new NetworkMessage(); |
| 761 | msg->time = Glob.time; |
| 762 | NetworkMessageContext ctx(msg, format, this, to, MSG_SEND); |
| 763 | TMError err = object->TransferMsg(ctx); |
| 764 | if (err != TMOK) |
| 765 | { |
| 766 | return 0xFFFFFFFF; |
| 767 | } |
| 768 | |
| 769 | // send message |
| 770 | return SendMsg(to, msg, type, dwFlags); |
| 771 | } |
| 772 | |
| 773 | void NetworkComponent::DecodeMessage(int from, NetworkMessageRaw& src) |
| 774 | { |
| 775 | StatRawMsgReceived(from, src.GetSize()); |
| 776 | |
| 777 | OnMonitorIn(src.GetSize()); |
| 778 | |
| 779 | // message header |
| 780 | NetworkMessageType type; |
| 781 | if (!src.Get((int&)type, NCTSmallUnsigned)) |
| 782 | return; |
| 783 | Time time; |
| 784 | if (!src.Get(time, NCTNone)) |
| 785 | return; |
| 786 | |
| 787 | if (type == NMTMessages) |
| 788 | { |
| 789 | int n; |
| 790 | if (!src.GetCount(n, NCTSmallUnsigned)) |
| 791 | return; |
| 792 | for (int i = 0; i < n; i++) |
| 793 | { |
| 794 | NetworkMessageType type; |
| 795 | #if _ENABLE_CHEATS |
| 796 | int oldPos = src.GetPos(); |
| 797 | #endif |
| 798 | src.Get((int&)type, NCTSmallUnsigned); |
| 799 | NetworkMessageFormatBase* format = GetFormat(type); |
| 800 | if (!format) |
| 801 | { |
| 802 | if (DiagLevel >= 1) |
| 803 | { |
| 804 | DiagLogF("Warning: Format not found"); |
| 805 | } |
| 806 | return; |
| 807 | } |
| 808 | Ref<NetworkMessage> msg = new NetworkMessage(); |
| 809 | msg->time = time; |
| 810 | // Message body |
| 811 | DecodeMsg(msg, src, format); |
| 812 | OnMessage(from, msg, type); |