-01/30/2012 - Getting Started
I started last week researching about Sockets since that would be the base of my project. I marked today as the first entry in my journal, because I just finished the website. I have some Ideas about how I will structure my Project. First I will create a client-Server interface in which the client will be requesting the IP address of other clients connected to the server. Once the phone has to other devices IP address the communication will start. In order for the server to be up to date with all the current IP address, the client will be constantly checking its own address and if changed, it will contact the server and tell it that his address has changed. In the other hand in order to have the clients with the current IP addresses, the client will request the server for the IP address every time this has to send a message. At this moment I am not totally confident about how to work with Sockets, that said, the project might have some changes in the approach but the idea should be the same.
-02/01/2012- Brain Storming
I have decided to take a different approach to the project, Instead of connecting to the server and then connect to the other mobile devices, all the devices are going to be connected to the server and communicate through it. I am still deciding how I am going to manage the clients, with an array or with a list of clients, but the whole idea would be that when one of the clients is talking all the other ones on the network will listen to him.
-02/13/2012- Decisions
During these two weeks I have been researching other kind of sockets, I have two different Solutions at the moments. One of them is using TCP sockets and the other one is UDP, both of them are making a connection between different forms. I explored both solutions to see the pros and cons of each one and at this moment I have decided to finally go with UDP Sockets. This week I will start creating the android application and I will start making attempt to connect to the current application I have written in C#.
-02/19/2012-Android
This week I down loaded the necessary software to start working on the Android application, but this is as far as I have gotten with this side of the project. I have mostly been working on the C# app. Right now I have a server that creates a connection with the users using a TCP Socket connection. The user sends its own IP address to the server who puts it in an array, later it creates an object client who contains all the methods and the stream connection between the client and the user and adds it to a list of client objects. When the clients need to communicate with other clients, they send a request to the server to get the IP addresses of all the clients connected to the server at a given moment. The server puts all the addresses into a string. Ex: 123.258.2.236/null. Once the client has received the string, it parses it and sends a text message to all the other clients using a UDP socket connection. This week I did not work on the Android side of the project due to keeping up to date with other classes work load and a visit to Milwaukee for the Internship and Work fair held there last Thursday. I have not had the chance to fully sit and start new things but every chance I have had I have been structuring and commenting my code to make it work faster and be more readable. I have also been working on deleting methods that I decided not necessary and created new ones for better manage of resources and better connection as well as a cleaner code.
02/28/2012 Android 2
I have been working with the Android, at this point I have an interface and I am communicating with the server, all this has been done in my computer I have been having troubles trying to connect to a different computer.
03/05/2012 Android 3
At this point I connected the Android application to the server using TCP sockets. The server recognizes the User and saves the IP address. The application is quite simple at this point. It has two buttons, one for Connecting and one for Sending messages along with a text field for the text. After having this achieved I decided to go back to my C# interface and clean some of the bugs that I had at the moment. Nothing big but never the less important in order to keep a clean communication between the clients and the server.
03/12/2012 Computer & Phone
I started making some attempt to connect the phone with the C# interface, but I have not gotten good connection. I believe there is something with the way I am setting up the UDP Sockets on the Android Application side. At this point I am planning of putting the Android Application on the side.
03/19/2012
I decided to have something working on the C# interface regarding the voice.
I found an article in internet that talks about how to use DirectX to connect to the microphone and record sounds using a buffer. The API name is DirectSound.dll. This
Is really helpful since once set up you can record and play the sounds. I also found another article in which this API is being used to stream music. At this moment I am getting familiar with how to set up my application in C# in order to record.
03/26/2012
At this point, I am able to record and play music on my C# interface as well as sending and receiving bytes to be played using UDP Sockets. I am having some issues because the sender is sending faster than the listener is getting the bytes. I am planning on setting some kind of a flag, but the communication is happening so I decided to go back to the android side of the project. On the android side I can connect to the server and the C# interface using TCP and UDP sockets. I am working on a method call ToByte() which takes an enum and two strings. The method is going to take the enum and convert it into bytes, as well as the string sizes (int) and the strings. This is causing me problems since when I connect client to client the C# Method in charge of changing the bytes back to strings and enum is breaking because I am not sending the bytes correctly. I believe this has to be with endianess difference between Java and C#, but I am not completely sure at the moment so I am planning to research about this. I have a good Java book that shows me how to manipulate bytes.
04/02/2012
I created methods that deal with the transformation between java and C#, in order to receive bytes and convert them into Integers, strings and/or enum. The communication between the android Application and the C# server is functional, but I still need to do some minor cleaning. At this point I am focusing on the voice encoding, decoding and sending of the project.
04/09/2012
I have had progress on the C# application, and at this point is functional, but it needs some cleaning to do. Thanks to this I have dedicated more time to my Android Application in order to make it fully functional. Some of the issues that I have found so far is the conversion of my ideas from C# into Java. These two languages share many similarities; so changing my ideas between them have not been difficult. At the same time some of the ideas are not as easy to translate from one to another. Some of them were creating asynchronous threads and handling of bytes the ideas were the same but the syntax was not.
04/16/2012
At this point the server, C# client and the Java client are fully functional. The server communicates with the two different clients using TCP sockets and the clients communicate with each other using UDP sockets. This last week I will focus on cleaning some of the methods, make sure I documented all my changes and improve the appearance of the three programs, the tow clients and the server.