Client - Server communication

I need some advice how to implement a system which allow me to duplicate Client changes to Server as well as make Server able to change the Client.

In my project I have a Client, which holds all logic, and Server, which should be able to see exactly the same view from Client (with all changes that Client made). I have achieved this sort of functionality by running a Client function by two custom events: one for Server (Run on Server) and one for Client itself (Run on owning Client). The problem is, I have a lot of functions in Client. For all of this functions I have to add two custom events to make a change on Client and Server. Is there an easier way to achieve that (I do not want to replicate simple variable, but functionality like drawing something on screen)?

The second problem is that my solution does not work on Server side. Both Server event and Client event are called on Server and changes are not propagated to the actual Client. How can I run function on Client that will affect Client and Server (Multicast does not work for me)?